Problema para verificar se um objeto já está contido no array
5 respostas
Inathan
O programa está entrada no erro de dizer que o ponto já exite e não está imprimindo o ToString… Poderiam me ajudar? o erro é NullPoint.
publicstaticvoidmain(String[]args){Scannerler=newScanner(System.in);Pontopontos[]=newPonto[3];Pontoexistente[]=newPonto[pontos.length];for(inti=0;i<pontos.length;i++){System.out.println("Insira um novo ponto \nx:");intx=ler.nextInt();System.out.println("y:");inty=ler.nextInt();Pontop=newPonto(x,y);existente[i]=p;if(existente[i]!=null){if(existente[i].equals(p)){System.out.println("Erro! Ponto já existe");}else{pontos[i]=p;}}}for(Pontoi:pontos){System.out.println(i.toString());}
Pontop=newPonto(x,y);existente[i]=p;// aqui você inseriu um Ponto != null na posição 'i'if(existente[i]!=null){// esse 'if' é desnecessário, a posição 'i' sempre vai ser != de null, veja a linha anteriorif(existente[i].equals(p)){// sempre vai entrar nesse 'if' pois na posição 'i' você acabou de inserir o objeto 'p'System.out.println("Erro! Ponto já existe");}else{pontos[i]=p;}}
Muito obrigado amigo, vou tentar dar uma otimizada.
Inathan
Você me recomendaria algo para saber se o valor passado pelo usuario já está em um array?
staroski
Você só tem que pensar em executar as ações na ordem certa.
No código que você postou você estava primeiro inserindo o objeto no array para depois verificar se ele já estava inserido.
Você tem que verificar antes de inserir, veja:
publicstaticvoidmain(String[]args){Scannerentrada=newScanner(System.in);Pontopontos[]=newPonto[3];for(inti=0;i<pontos.length;i++){System.out.print("Insira um novo ponto \nx: ");intx=entrada.nextInt();System.out.print("y: ");inty=entrada.nextInt();Pontop=newPonto(x,y);// cria o objeto com os parâmetros que o usuário informouif(estaContido(p,pontos)){// verifica se já existe no arraySystem.out.println("Erro! Ponto já existe");// se existe, mostra mensagem}else{pontos[i]=p;// se não existe, insere no array}}for(Pontoi:pontos){System.out.println(i.toString());}}privatestaticbooleanestaContido(Pontop,Ponto[]pontos){for(inti=0;i<pontos.length;i++){if(p.equals(pontos[i])){returntrue;}}returnfalse;}