[Resolvido]Problema para comparar Strings

13 respostas
J

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.

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]);
					
		}
	}
}

13 Respostas

xandevieira

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

J
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

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

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]);
		
			}
		}
	}
}
Fellipex

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]);  

}
yurimindfreak

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:

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++;
        }  
    }  
}
Fellipex

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

yurimindfreak

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.

J

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.


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

yurimindfreak

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…

Fellipex

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

victormagno

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.

victormagno

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

J

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

Valeu Felipe, clareou as ideias aqui, agora entendi.

Criado 29 de outubro de 2012
Ultima resposta 30 de out. de 2012
Respostas 13
Participantes 5