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

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

Avatar
David K
Člen
Avatar
David K:

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. listopadu 12:02
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na David K
Jiří Gracík:

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. listopadu 12:24
Creating websites is awesome till you see the result in another browser ...
Avatar
David K
Člen
Avatar
Odpovídá na Jiří Gracík
David K:

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. listopadu 12:46
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na David K
Jiří Gracík:

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. listopadu 14:30
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 17. listopadu 14:29
Creating websites is awesome till you see the result in another browser ...
Avatar
David K
Člen
Avatar
Odpovídá na Jiří Gracík
David K:

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

 
Nahoru Odpovědět 17. listopadu 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.