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.
importjava.util.Scanner;publicclassAdicionaCompara{publicstaticvoidmain(String[]args){String[]telefones=newString[5];intindice=0;Scannerscan=newScanner(System.in);for(intx=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]);}}}
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
jeandelima
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.
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?
//StringtelefoneScan=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ó atribuirtelefones[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:
importjava.util.Scanner;publicclassTeste{publicstaticvoidmain(String[]args){String[]telefones=newString[5];intindice=0;Scannerscan=newScanner(System.in);for(intx=0;x<telefones.length;x++){System.out.print("Digite um numero de telefone: ");Stringtele=scan.nextLine();for(intj=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
jeandelima
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.
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
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.