Wpis z mikrobloga

#naukaprogramowania #java
uczę się scannera i nie wiem gdzie popełniłem błąd. Jak wpisuje dodawanie to od razu wyskakuje "nie da rady"
double a;
double b;
String zadanie;


Scanner odczyt = new Scanner(System.in);
System.out.println("co chcesz robić?");
zadanie=odczyt.nextLine();
if (zadanie == "dodawanie")
{
System.out.println("Podaj pierwszą liczbę: ");
a = odczyt.nextDouble();
System.out.println("Podaj drugą liczbę: ");
b = odczyt.nextDouble();
System.out.println("Twój wynik to: " + (a + b));
}
else
{
System.out.println("Nie da rady");
}
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@ugotowany_kamien: W przypadku obiektów operator porównania (==) sprawdza czy to są te same obiekty (te same referencje). W zmiennej 'zadanie' będzie jakiś String, a "dodawanie" to jakaś inna instancja String. Tym samym == zwróci false nawet tutaj: "asdf" == "asdf". Jeśli chcesz porównywać obiekty użyj .equals() np. if ("dodawanie".equals(zadanie)).
  • Odpowiedz
@Eoghan: W prostym przypadku to prawda. Trochę sytuacja się zmienia, gdy literałów jest dużo i ich liczba przekracza maksymalny rozmiar 'string pool'. Wtedy już pewności nie ma co '==' zwróci. Też trochę zależy od konkretnej wersji JVM.
  • Odpowiedz