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 < telefones.length; x++){
System.out.println("Digite um número de telefone:");
telefones[x] = scan.nextLine();
if(telefones.equals(telefones[x])){
System.out.println("Número existente");
x--;
}
else{
System.out.println("Índice: " + x + " Número: " + 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.