[Resolvido]Problema para comparar Strings - Java - GUJ
[Resolvido]Problema para comparar Strings
jeandelima Outubro 29, 2012, 4:49pm #1
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.
public class AdicionaCompara{
String[] telefones = new String [5];
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]);
xandevieira Outubro 29, 2012, 5:38pm #2
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
jeandelima Outubro 29, 2012, 6:23pm #3
[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.
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;);
System.out.println(&quot;Índice: &quot; + x + &quot; Número: &quot; + telefones[x]);
Fellipex Outubro 30, 2012, 5:43am #4
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.
//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 Outubro 30, 2012, 7:31am #5
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.
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]);
Fellipex Outubro 30, 2012, 8:16am #6
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!
yurimindfreak Outubro 30, 2012, 8:33am #7
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.
jeandelima Outubro 30, 2012, 9:43am #8
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.
2012/10/30/fe06bdcb5e2e3697e979ec29fadd0f1a_147193.png_1366×768 286 KB
Fellipex Outubro 30, 2012, 9:55am #9
Amigo vou te dar a dica e veja se você consegue resolver
for(int i = 0 ;  i < algumaCoisa.length; i++){
if(algumaCoisa[i] == qualquerOutraCoisa){
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.
yurimindfreak Outubro 30, 2012, 9:57am #10
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++; } }
Fellipex Outubro 30, 2012, 10:00am #11
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
victormagno Outubro 30, 2012, 10:02am #12
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.