Fazer busca dentro de um array [RESOLVIDO]

5 respostas
edipokbelo

Bom galera
ah minha dúvida é boba, eu até consigo fazer, mas não fica mto bom
eu tenho um array e preencho ele com números.
Então quero digitar um número e quero fazer uma busca dentro desse array, para ver se esse número existe ...

segue o código
import java.util.Arrays;

	public class NovoArray {
		protected int[]a;
		int indice=0;
		
		NovoArray(int tamanho){
		a = new int[tamanho];
		}
		
		
		public int getIndice(){
			return indice;
		}
		
	public void addItem(int numero){
		if(getIndice()<a.length){
		a[getIndice()] = (int)(numero);
		indice++;
		}
		else{
			System.out.println("Array esta cheio e não podem ser adicionados mais itens!");
		}
	}
	
	public void removeItem(){
			indice=indice-1;
		}
			
	public boolean getListaCheia(){
		if(getIndice()>a.length){
			return true;
			}
		else{
			return false;
			}
		}
 
	public int mostraMaior(){
		int maior=a[0];
		for (int i=0; i<a.length;i++)
			if (maior<a[i])
				maior=a[i];
			return maior;
	}
	
	public int mostraMenor(){
		int menor=a[0];
		for (int i=0; i<a.length;i++)
			if (menor>a[i])
				menor=a[i];
			return menor;
		}
	
	public int mostraUltimo(){
		return a[getIndice()];
	}
 		
	public int getTamanho(){
		return (int)(a.length);	
		}
	
	public int getValor(int posicao){
		return a[posicao];
	
	 }
	
	public void procuraElemento(int elemento){
		for (int i=0; i<getTamanho();  i++)
			   if(getValor(i)==elemento){
				   System.out.println("existe");
			   }
			   else{
				   System.out.println("nao existe");
			   }
	}
	

	}//ultima chave
agora da aplicação
import java.util.Scanner;

	public class AplicNovoArray {
		
		public static void main(String[] args) {
		  Scanner entrada;
		  entrada = new Scanner(System.in);	
		  int t,escolha,item,repetir,elemento;
		  System.out.println("Digite o valor do tamanho do array:");
		  t = entrada.nextInt();
		  NovoArray cc=new NovoArray(t);
		 
		 do{ System.out.println("Menu: \n 1-Inserir Item \n 2-Remover Item \n 3-Mostrar Ultimo Item do Array \n 4-Mostrar todos Itens \n 5-Mostrar Maior \n 6-Mostrar Menor \n 7-Buscar Elemento \n 8-Mostra tamanho array \n 9-Sair ");
		  escolha = entrada.nextInt();
		  switch(escolha){
		  
		  case 1: 
			  do{
			  			if(!cc.getListaCheia()){
			  				System.out.println("Digite o valor que deseja inserir no array");
			  				item = entrada.nextInt();
			  				cc.addItem(item);
			  			}			  	
			  		System.out.println("Deseja inserir outro item? 1-Sim 2-Nao");
			  		repetir = entrada.nextInt();
		  			
		  		}while(repetir==1);
		  			break;
		  			
		  case 2: System.out.println("Sera removido o ultimo item da lista...");
		  			cc.removeItem();
		  			break;
		  			
		  case 3: System.out.println("O ultimo item do array é:"+cc.mostraUltimo());
		  			
		  			break;
		  			
		  case 4:for (int i=0; i<cc.getTamanho();  i++){
			   		System.out.print(cc.getValor(i)+" ");}
		  			System.out.println("");
		  			break;
		  			
		  case 5: System.out.println("Maior valor é:"+cc.mostraMaior());
		  			break;
		  			
		  case 6: System.out.println("Menor valor é:"+cc.mostraMenor());
		  			break;
		  case 7: System.out.println("Digite o numero pelo qual deseja procurar: ");
		  			elemento = entrada.nextInt();
		  			cc.procuraElemento(elemento);
		  			break;
		  case 8: System.out.println("Tamanho array:"+cc.getTamanho());
		  			}
		 }while(escolha!=9);
		  
	}
}

ele faz a busca
mas por exemplo, se eu tenho um array de 3 posições
se o número existir, ele exibe EXISTE e na outras 2 posições aparece NAO EXISTE

5 Respostas

Lavieri

assim é mais elegante

public boolean contains(int elemento){ for (int num : a) { if(num==elemento){ return true; } } return false; }
vai buscar, se encontrar return true e para de buscar, se não encontrar ate acabar a lista, retorna false

ai se quiser imprimeir vc simplismente pode fazer algo como

if(contains(numero)) { System.out.println("existe"); } else { System.out.println("nao existe"); }

pmlm

Isso é porque estás a imprimir para todas as posições.

public void procuraElemento(int elemento){  
       boolean exist = false; //vamos assumir que não existe
       for (int i=0; i<getTamanho();  i++)  
               if(getValor(i)==elemento){  
                    exist = true; //existe
                    break; //encontrou, não precisa de procurar mais
               }  
       }
       if (existe) {
               System.out.println("existe");     
      } else {
               System.out.println("não existe");           
     }
 
}
edipokbelo

valeu PMLM e Lavieri teste dos 2 jeitos e deu certo :wink:
imprimindo do jeito que eu quero !

agora tem outro problema :?

eu não consigo fazer ele mostrar o último elemento digitado
se eu fizer um array de 5 posições, e só digitar 3 números, ele teria que mostrar o último número digitado
e não a última posição da matriz , que no caso esta vazia

pmlm

Ele está a mostrar a posição a seguir ao último número digitado.

public int mostraUltimo(){ if (indice == 0){ // não existem items. return 0; } return a[indice - 1]; }

Já agora, no mostraMaior e mostraMenor deves percorrer o array até índice e não até ao fim.

edipokbelo

a minha lógica estava errada
do meu jeito eu teria que colocar como indice= -1 e não indice=0
para ele fazer aparecer o último número
e o indice++ estaria no começo da expressão

vlw cara !

eu sou mto ruim com arrays :frowning:

Criado 18 de maio de 2009
Ultima resposta 18 de mai. de 2009
Respostas 5
Participantes 3