• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Proste pytanie dotyczące stringów, if'ów i klasy Scanner

VPS Starter Arubacloud
+1 głos
174 wizyt
pytanie zadane 30 czerwca 2021 w Java przez GrayWolf Nowicjusz (130 p.)

Witam, mam proste pytanie na które od wczoraj nie mogę znaleźć odpowiedzi. Wykorzystując if'y chciałbym uruchomić dane warunki w zależności od tego co zostanie wprowadzone do konsoli, jednak wprowadzany do konsoli ciąg znaków - nie jest rozpoznawany jako tożsamy z tym który jest wskazany w warunku. Najlepiej będzie wskazać mi to na przykładzie:

// To działa jak należy

    String odp = "NIE";

    if (odp == "TAK"){
        System.out.println("A więc jednak TAK");
    }
    else if (odp == "NIE"){
        System.out.println("NIE do końca");
    }
    else{
        System.out.println("Wszystko inne");
    }

// Z tym również nie mam problemu

    Scanner scan = new Scanner(System.in);
    int odp = scan.nextInt();

    if (odp == 1){
        System.out.println("Wybrano 1");
    }
    else if (odp == 2){
        System.out.println("A tutaj 2");
    }
    else{
        System.out.println("Wybrano inną cyfrę");
    }

// Natomiast tutaj wprowadzane w konsoli "TAK" nie jest rozpoznawane i zawsze kończy się ostatnim "elsem"

    Scanner scan = new Scanner(System.in);
    String odp = scan.next();

    if (odp == "TAK"){
        System.out.println("Wybrano 1");
    }
    else if (odp == "NIE"){
        System.out.println("A tutaj 2");
    }
    else{
        System.out.println("Wpisano cokolwiek innego");
    }

 

2 odpowiedzi

0 głosów
odpowiedź 30 czerwca 2021 przez Velta Maniak (51,890 p.)

W Javie do porównania m. in. wartości należy użyć metody Object.equals:

Scanner scan = new Scanner(System.in);
String odp = scan.next();
if (odp.equals("TAK")) {
    System.out.println("Wybrano 1");
} else if (odp.equals("NIE")) {
    System.out.println("A tutaj 2");
} else {
    System.out.println("Wpisano cokolwiek innego");
}

Albo po prostu użyć switcha:

switch (odp) {
    case "TAK":
        System.out.println("Wybrano 1");
        break;

    case "NIE":
        System.out.println("A tutaj 2");
        break;

    default:
        System.out.println("Wpisano cokolwiek innego");
        break;
}

 

0 głosów
odpowiedź 1 lipca 2021 przez Wiciorny Ekspert (269,120 p.)

Zapraszam do lektorki, bo Klasa String i ten problem, który u Ciebie występuje to jedna z podstawowych rzeczy, którą musisz zrozumieć w Javie do dalszej pracy 
https://javastart.pl/baza-wiedzy/efektywne-programowanie/javatraps-001

Sprawa prosta: porównanie = -> to porównywanie referencji czym to jest też powinieneś wiedzieć i się zapoznać 

Wartości typów obiektowych porównujemy odpowiednimi metodami, albo equals, albo implementowanymi według własnych warunków. 

 

// To działa jak należy
 
    String odp = "NIE";
 
    if (odp == "TAK"){
        System.out.println("A więc jednak TAK");
    }
    else if (odp == "NIE"){
        System.out.println("NIE do końca");
    }
    else{
        System.out.println("Wszystko inne");
    }

Zapoznaj się jeszcze z STRING POOL :) i tym jak tworzone są stringi, gdyż o ile to może i działa 

to tak naprawdę to co poniżej już nie . 
 

public class HelloWorld{

     public static void main(String []args){
        
    String odp = new String("NIE");
 
    if (odp == "TAK"){
        System.out.println("A więc jednak TAK");
    }
    else if (odp == "NIE"){
        System.out.println("NIE do końca");
    }
    else{
        System.out.println("Wszystko inne");
    }
     }
}

// to nie działa Wszystko inne -> rezultat :) 

 

Podobne pytania

0 głosów
1 odpowiedź 130 wizyt
pytanie zadane 4 kwietnia 2020 w Java przez malybyq Użytkownik (980 p.)
0 głosów
5 odpowiedzi 319 wizyt
pytanie zadane 26 marca 2019 w Java przez gorgonkowa Obywatel (1,810 p.)
0 głosów
1 odpowiedź 1,724 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...