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í.

Diskuze: Jak funguje třída scanner ?

Aktivity
Avatar
Honza
Člen
Avatar
Honza:14.4.2021 18:57

Ahoj, měl bych dotaz, proč v následujícím kódu se při opětovném spuštění toho do-while cyklu nevypíše okno se zadáváním do proměnné "text" ? Ale v další variantě toho kódu zase nejde zadávat do proměnné "pokracovat" ? Vím, že je to docela blbá otázka, ale přišlo mi to zajímavé. :-D

public static void main(String[] args) {

                Scanner sc = new Scanner(System.in);

        boolean pokracovat = false;
        String text;
        int cislo;
        do{
                 System.out.print("zadej text: ");
             text = sc.nextLine();
             System.out.println(text);

            System.out.print("zadej číslo: ");
           cislo = sc.nextInt();
           System.out.println(cislo);



           System.out.print("Znovu");
           int znovu = sc.nextInt();
           if(znovu == 1){
           pokracovat = true;
           }else {
           pokracovat = false;
           }
        }while(pokracovat);

                sc.close();

        }
public static void main(String[] args) {

                Scanner sc = new Scanner(System.in);

                String pokracovat;
        String text;
        int cislo;

        do{

                 System.out.println("zadej text: ");
             text = sc.nextLine();
             System.out.println(text);

             System.out.println("zadej číslo: ");
             cislo = sc.nextInt();
             System.out.println(cislo);

           System.out.println("Znovu");
           pokracovat = sc.nextLine();

        }while(pokracovat.equals("ano"));

                sc.close();

        }
 
Odpovědět
14.4.2021 18:57
Avatar
Odpovídá na Honza
Petr Štechmüller:14.4.2021 19:16

Ahoj,

na to ti odpovím odkazem.

Jde právě o použití metody nextInt, která "nepožere" odřádkování ze vstupu. Takže řešení jsou dvě:

  1. Použij Integer.parse­Int(sc.nextLi­ne())
  2. Nebo za každé načtení čísla vlož opět sc.nextLine(). Tím se přečte to odřádkování a můžeš veselé načítat další vstup.
Editováno 14.4.2021 19:16
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
14.4.2021 19:16
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Honza
Člen
Avatar
Odpovídá na Petr Štechmüller
Honza:14.4.2021 20:25

Děkuji už to chápu :-)

 
Nahoru Odpovědět
14.4.2021 20:25
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 3 zpráv z 3.