[Resolvido]Problema para comparar Strings

Pessoal, eu to com um pequeno problema aqui. Eu estou tentando fazer um exercício que foi passado na aula, mas não consegui absorver bem a explicação que tive e fiquei meio perdido. Criei um array pra ir adicionando números de telefone, mas não consegui fazer comparação entre as Strings para verificar se o número já existe alocado em algum índice. Alguém pode me dar uma luz? Desde já, agradeço. Segue abaixo o código.

[code]import java.util.Scanner;

public class AdicionaCompara{

public static void main (String[] args){
	
	String[] telefones = new String [5];
	int indice = 0;
	Scanner scan = new Scanner(System.in);
	
	
	for(int x = 0; x < telefones.length; x++){
		
		System.out.println("Digite um número de telefone:");
		
		telefones[indice] = scan.nextLine();
		
						
		System.out.println("Índice: " + x + " Número: " + telefones[indice]);
				
	}
}

}
[/code]

vc não esta comparando em nenhum momento se existe ou não.
vc tera de verificar se não é a primeira iteração, depois iterar o array comparando a string equalsignorecase

[quote=avsouza]vc não esta comparando em nenhum momento se existe ou não.
vc tera de verificar se não é a primeira iteração, depois iterar o array comparando a string[/quote]

Dá uma olhada no código abaixo e vê o que eu to fazendo de errado, acho que tá faltando alguma coisa.

[code]import java.util.Scanner;

public class AdicionaCompara{

public static void main (String[] args){
	
	String[] telefones = new String [5];
	
	Scanner scan = new Scanner(System.in);
	
	
	for(int x = 0; x &lt; telefones.length; x++){
		
		System.out.println(&quot;Digite um número de telefone:&quot;);
		
		telefones[x] = scan.nextLine();
		
		if(telefones.equals(telefones[x])){
			
			
			System.out.println(&quot;Número existente&quot;);
		
		x--;
			
		}
		else{
		
		
		System.out.println(&quot;Índice: &quot; + x + &quot; Número: &quot; + telefones[x]);
	
		}
	}
}

}
[/code]

Você está comparando o array com ele mesmo
Você deve atribuir a string que foi lida pelo nextLine a uma variavel string e depois comparar com o array certo?

//
String telefoneScan = scan.nextLine();  

if(telefones[x].equals(telefoneScan){

 System.out.println("Número existente");  
//Não pode decrementar o x, pois você está incrementando ele dentro do for, podendo causar um loop inifinito, simplesmente informe ao usuario, e continue a execução.

}else{
  //Se o numero nao estiver no array você quer colocá- lo?Se sim
  //só atribuir
      telefones[x] = telefoneScan;
     System.out.println("Índice: " + x + " Número: " + telefones[x]);  

}

Pelo que eu entendi, para cada posição que você adiciona você tem que verificar se o número já existe em alguma posição. É isso?

Se for assim, pra cada valor que você for inserir, você tem que varrer o array antes da inclusão comparando o valor digitado com cada posição lida. Caso algum String.equals() retorne true, então o valor já existe no array, acho que nesse caso não precisa de equalsIgnoreCase pois são números né?

Isso seria um for dentro de outro for, um para ler cada posição e o outro interno para varrer o array e verificar se aquele numero ja existe dentro de alguma posição.

Seria algo como:

[code]import java.util.Scanner;

public class Teste{

public static void main (String[] args){  
      
    String[] telefones = new String [5];  
    int indice = 0;  
    Scanner scan = new Scanner(System.in);  
    for(int x = 0; x < telefones.length; x++){
        System.out.print("Digite um numero de telefone: ");  
        String tele = scan.nextLine();
		for(int j = 0; j < telefones.length; j++){
			if(tele.equals(telefones[j])){
				System.out.println("Numero ja existe no array");
			}
		}
		telefones[indice] = tele;
        System.out.println("Indice: " + x + " Numero: " + telefones[indice]);
		indice++;
    }  
}  

}[/code]

yuri nao é por nada , mas eu ja havia respondido isso e no seu exemplo você utiliza x como indice porém quer printar o elemento que está no telefones[indice], não há motivo para criar uma variável de indice visto que dentro do for ja existe o x que faz isso!
Att

Porém eu entendi que no seu exemplo você está verificando apenas na posição atual, já que a sua leitura está dentro do for com variável x. Dessa forma se o cara informa o numero 2 na iteração 1 você só vai verificar se existe esse número na posição 1 do array…

Caso eu tenha interpretado errado, me desculpe então.

Galera, valeu ae a ajuda. Eu fiz dos dois jeitos, mas a forma que o Yuri fez é semelhante a que vi na sala de aula, usando um for dentro de outro for. Só tenho mais uma dúvida. É o seguinte, Felipe, você falou pra não decrementar, só que se eu não decrementar, ele vai adicionar o número mesmo já existindo outro idêntico. Aí eu adicionei o (x–;), só que, quando eu tentei inserir mais uma vez o mesmo número, teoricamente, no laço ele deveria adicionar a um índice e se a String referente ao índice fosse diferente dos dados de entrada deveria ser decrementado. Porque em vez de permanecer no índice 0 ele foi pra o índice -1 quando insisti? Eu não sabia que havia um índice -1. Tá aí abaixo um screenshot. Abraço.


Amigo vou te dar a dica e veja se você consegue resolver
Pensa assim

for(int i = 0 ;  i < algumaCoisa.length; i++){
    if(algumaCoisa[i] == qualquerOutraCoisa){
        //bla bla bla
   }
 i--;
}

Este loop seria infinito pois ele nunca sairia da posição 0, pois a cada iteração você INCREMENTA e DECREMENTA a variável I
ou seja i = 0 , i+1 ,depois i-1, que no fim vai dar = 0, certo? Nunca terá fim e sempre ficará na posição 0
O laço que controlá é o seguinte a cada iteração voce simplesmente incrementa I++ e enquanto ele for < algumaCoisa.length ele vai iterar , certo?
O código do Yuri ta bom para o seu caso, porém só uma dica não precisa da variavel indice, pois o x no seu caso ja indica o indice que tem que ser colocado o telefone lido do teclado.

Att

Alterando meu laço para

for(int j = 0; j < telefones.length; j++){ if(tele.equals(telefones[j])){ System.out.println("Numero ja existe no array"); } else { telefones[indice] = tele; System.out.println("Indice: " + x + " Numero: " + telefones[indice]); indice++; } }

deve resolver…

Então yuri como eu havia falado antes neste trecho. Corrija apenas isto

 telefones[x] = tele;  
  System.out.println("Indice: " + x + " Numero: " + telefones[x]);    

Se x é o indice porque usar uma variavel indice?
simplesmente telefones[x] faz a mesma coisa e não necessitará dessa outra variavel
Att

yuri, este código não está impedindo que um número repetido seja inserido no array. Apenas exibe uma mensagem para o usuário informando o ocorrido.

Ignore meu comentário, yuri. Você acabou corrigindo o código antes de eu postá-lo.

[quote=Fellipex]Amigo vou te dar a dica e veja se você consegue resolver
Pensa assim

for(int i = 0 ;  i < algumaCoisa.length; i++){
    if(algumaCoisa[i] == qualquerOutraCoisa){
        //bla bla bla
   }
 i--;
}

Este loop seria infinito pois ele nunca sairia da posição 0, pois a cada iteração você INCREMENTA e DECREMENTA a variável I
ou seja i = 0 , i+1 ,depois i-1, que no fim vai dar = 0, certo? Nunca terá fim e sempre ficará na posição 0
O laço que controlá é o seguinte a cada iteração voce simplesmente incrementa I++ e enquanto ele for < algumaCoisa.length ele vai iterar , certo?
O código do Yuri ta bom para o seu caso, porém só uma dica não precisa da variavel indice, pois o x no seu caso ja indica o indice que tem que ser colocado o telefone lido do teclado.

Att[/quote]

Valeu Felipe, clareou as ideias aqui, agora entendi.