• 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

Object Storage Arubacloud
+1 głos
175 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 (52,010 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,710 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ź 132 wizyt
pytanie zadane 4 kwietnia 2020 w Java przez malybyq Użytkownik (980 p.)
0 głosów
5 odpowiedzi 324 wizyt
pytanie zadane 26 marca 2019 w Java przez gorgonkowa Obywatel (1,810 p.)
0 głosów
1 odpowiedź 1,740 wizyt

92,556 zapytań

141,404 odpowiedzi

319,561 komentarzy

61,942 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...