Diskuze: Pomozte začátečníkovi - cykly

Java Java Pomozte začátečníkovi - cykly

Aktivity (1)
Avatar
David K
Člen
Avatar
David K: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 K
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 K
Člen
Avatar
Odpovídá na Neaktivní uživatel
David K: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 K
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í
+1 bodů
Řešení problému
Nahoru Odpovědět 17.11.2016 14:29
Neaktivní uživatelský účet
Avatar
David K
Člen
Avatar
 
Nahoru Odpovědět 17.11.2016 15:29
Avatar
David K
Člen
Avatar
Odpovídá na Neaktivní uživatel
David K: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.