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 ...

0
anon 23 marzec 2020, 10:32

2 odpowiedzi

Najlepsza odpowiedź

Widzę dwa problemy w twoim programie:

  1. 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.

  2. 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])

1
sgX 23 marzec 2020, 08:31

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ń.

1
William A. 23 marzec 2020, 07:42