• 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

Fiszki IT
Fiszki IT
+1 głos
59 wizyt
pytanie zadane 30 czerwca 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 przez Velta Nałogowiec (42,670 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 przez Wiciorny Mędrzec (166,950 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ź 54 wizyt
pytanie zadane 4 kwietnia 2020 w Java przez malybyq Użytkownik (980 p.)
0 głosów
5 odpowiedzi 193 wizyt
pytanie zadane 26 marca 2019 w Java przez gorgonek Obywatel (1,790 p.)
0 głosów
1 odpowiedź 1,021 wizyt
Porady nie od parady
Możesz ukryć, zamknąć lub zmodyfikować swoje pytanie, za pomocą przycisków znajdujących się pod nim. Nie krępuj się poprawić pochopnie opublikowanego pytania czy zamknąć go po uzyskaniu satysfakcjonującej odpowiedzi. Umożliwi to zachowanie porządku na forum.Przyciski pytania

84,746 zapytań

133,553 odpowiedzi

295,967 komentarzy

56,007 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...