Podzieliłem listę ciągów przez „,”, a następnie sprawdziłem charAt 0 == 1 i charAt 0 == 2, a następnie trójkąt równoboczny .... tak dalej, ale nie otrzymuję żadnego z nich dla wszystkich, podczas debugowania mogę zobacz, że charAt 0 i charAt 1 są równe bt cała ocena jest fałszywa.
public static void main(String[] args) {
List<String> triangleToy=Arrays.asList("36 36 36","3 3 3","2 4 2");
List<String> toRet= new ArrayList<String>();
// TODO Auto-generated method stub
for (String s : triangleToy) {
String[] index=s.split(" ");
if((index[0]==(index[1]))&&(index[0]==(index[2]))){
toRet.add("Equilateral");
}
else if(index[0]==(index[1])){
toRet.add("Isosceles");
}
else{
toRet.add("None of these");
}
}
System.out.println(toRet);
}
}
Proszę, wyjaśnij mi, co się tutaj dzieje ...
2 odpowiedzi
Widzę dwa problemy w twoim programie:
Jak już wspomniano, == porównuje odniesienie, które nie jest wiarygodne w przypadku twojego porównania ciągów, nie jest to również zalecany sposób porównywania ciągów w Javie,
index[0].equals(index[1])
i podobnie zrobiłby to za Ciebie. Więcej informacji znajdziesz w tej odpowiedzi.W instrukcji kontrolnej „równoramiennej” musisz mieć dodatkowe warunki, takie jak ten:
index[0].equals(index[1]) || index[1].equals(index[2]) || index[0].equals(index[2])
Podczas porównywania ciągów znaków w Javie (i bardziej ogólnie obiektów) z operatorem „==” porównywane są nie znaki łańcuchów, ale ich odniesienie. Jeśli dwa obiekty nie są tym samym obiektem, "==" zwraca false
Tutaj powinieneś zmodyfikować swoją pętlę for
w ten sposób:
for (String s : triangleToy) {
String[] index=s.split(" ");
if((index[0].equals(index[1]))&&(index[0].equals(index[2]))){
toRet.add("Equilateral");
}
else if(index[0].equals(index[1])){
toRet.add("Isosceles");
}
else{
toRet.add("None of these");
}
}
W przypadku ciągów funkcja .equals
porównuje znaki w łańcuchach zamiast ich odwołań.
Podobne pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].