Estou tentando fazer um programa que procure se a palavra fornecida pelo usuário está presente no vetor e imprima a mesma na tela com sua tradução em inglês (em outro vetor) e vice-versa. Mas no pedaço que grifei, está indo direto pro "Não encontrado" porque o "i" é igual a todas a palavras do vetor e não sei o porquê :(
import java.util.Arrays;
public class main {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
String a;
String [] vetor_pt = {"cachorro", "gato", "agua"};
String [] vetor_en = {"dog", "cat", "water"};
System.out.println(Arrays.deepToString(vetor_pt));
System.out.println(Arrays.deepToString(vetor_en));
System.out.println("Que palavra você quer buscar?");
a = in.next();
// ERRO: ELE PULA DIRETO PRO "NÃO ENCONTRADO" PORQUE "i = TODAS AS PALAVRAS DO VETOR"
for (int i = 0; i < vetor_pt.length-1; i++) {
if (vetor_pt[i] == a) {
System.out.println("Português: "+vetor_pt[i]+" Inglês: "+vetor_en[i]);
} else if (vetor_en[i] == a) {
System.out.println("Inglês: "+vetor_en[i]+" Português: "+vetor_pt[i]);
} else System.out.println("Não encontrado!");
}
}
}
Oi, ao invés de usar o operador ==
para comparar strings, deve-se usar o método .equals()
.
Isto porque, no Java, x == y
verifica se x
e y
se referem ao mesmo objeto na memória, mas a chamada a = in.next();
sempre cria uma nova string, mesmo quando o texto é idêntico à alguma string que você já tenha no vetor_pt
ou vetor_en
!
Daí, para verificar se duas strings possuem o mesmo texto dentro delas, usa-se x.equals(y)
.
O trecho corrigido fica assim:
for (int i = 0; i < vetor_pt.length-1; i++) {
if (vetor_pt[i].equals(a)) {
System.out.println("Português: "+vetor_pt[i]+" Inglês: "+vetor_en[i]);
} else if (vetor_en[i].equals(a)) {
System.out.println("Inglês: "+vetor_en[i]+" Português: "+vetor_pt[i]);
} else System.out.println("Não encontrado!");