Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
David Kroupa
Člen
Avatar
David Kroupa:17.11.2016 12:02

Ahoj, chtěl bych se zeptat, jak mohu udělat boolean typu ano/ne (namísto true/false) a následně ho použít mimo switch dole, aby mi to vypsalo pohlavi (System.out.prin­tln("pohlavi")

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String jmeno;
        String pohlavi;
        int vek;
        System.out.println("Dobrý den");
        System.out.println("Vaše jméno: ");
        jmeno = sc.nextLine();
        System.out.println("Váš věk: ");
        vek= sc.nextInt();
        while (vek<10 || vek>100) {
            System.out.println("Zadejte prosím pravdivý věk.");
            vek= sc.nextInt();
        }

        System.out.println("Jste žena? [ano/ne]");
        boolean an;
        pohlavi=sc.nextLine().trim().toLowerCase();
        switch (pohlavi) {
            case "ano":
                an=true;
                pohlavi= "Žena";
                break;
            case "ne":
                an=false;
                pohlavi= "Muž";
                break;
            default:
                System.out.println("Zadejte správné pohlaví");
                break;
        }
        System.out.println("Vaše údaje:");
        System.out.println("===========");
        System.out.println("Jméno: " +jmeno);
        System.out.println("Věk: " +vek);
        System.out.println("Pohlaví :" +pohlavi);
        }
 
Odpovědět
17.11.2016 12:02
Avatar
Odpovídá na David Kroupa
Neaktivní uživatel:17.11.2016 12:24

Boolean typu "ano"/"ne" udělat nemůžeš, protože "ano" a "ne" jsou hodnoty typu string a boolean bere jen true a false. Můžeš si udělat metodu:

boolean stringToBoolean( String input ) throws IllegalArgumentException{
        if ( input.equals( "ano" ){
                return true;
        } else if ( input.equals( "ne" ){
                return false;
        }
        throw new IllegalArgumentException();
}

...

// true
boolean answer = stringToBool( "ano" );

// false
boolean answer = stringToBool( "ne" );

boolean answer = stringToBool( sc.nextLine().trim().toLowerCase() );
Nahoru Odpovědět
17.11.2016 12:24
Neaktivní uživatelský účet
Avatar
David Kroupa
Člen
Avatar
Odpovídá na Neaktivní uživatel
David Kroupa:17.11.2016 12:46

Ok díky, a dá se v kódu co jsem napsal nějak "vytáhnout" odpověď z toho switche a vytisknout pod ním? jak tam mám naznačeno?

System.out.println("Pohlaví :" +pohlavi);
 
Nahoru Odpovědět
17.11.2016 12:46
Avatar
Odpovídá na David Kroupa
Neaktivní uživatel:17.11.2016 14:29

Ano

// I.
System.out.println( "Pohlaví : " + an ? "žena" : "muž" );

// II.
System.out.println( "Pohlaví : " + pohlavi.equals( "ano" ) ? "žena" : "muž" );

V prvním případě je zbytečné přiřazení do proměnné pohlavi ve switchi, ve druhém případě ztrácí celý switch význam.

Ještě jedna věc - nerecykluj proměnné. To znamená, abys pro vstup z konzole použil třeba proměnnou response, ale nepoužíval jí potom pro uložení pohlaví, které tam zrovna úplně nepatří.

Editováno 17.11.2016 14:30
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
17.11.2016 14:29
Neaktivní uživatelský účet
Avatar
David Kroupa
Člen
Avatar
Odpovídá na Neaktivní uživatel
David Kroupa:17.11.2016 15:58

Druhá možnost akorát háže error "Incompatible types: String cannot be converted to boolean"

 
Nahoru Odpovědět
17.11.2016 15:58
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.