Problem ze Scannerem

0

Oto fragment, tworzącego problem kodu:

    Scanner odczyt = new Scanner(System.in);
    UserManager obiekt= new UserManager();

            while(true)
            {
                System.out.print("Co chcesz zrobić?\n" + "[1] Dodaj użytkownika\n" + "[2] xxx\n");
                

                int a = odczyt.nextInt();
                
                if (a==1)
                            {
                                String nick, pw;
                                System.out.println("Podaj nick");
                                nick = odczyt.nextLine();
                                System.out.println("Podaj hasło");
                                pw = odczyt.nextLine();
                                obiekt.addUser(nick, pw);

                            }

            } 

Program się bez zastrzeżeń kompiluje, jednak po wpisaniu 1, wchodzi do tego warunku if i "przeskakuje" wpisywanie pierwszej zmiennej typu String.

Po skompilowaniu:

Co chcesz zrobić?
[1] Dodaj użytkownika
[2] xxx
1 //wpisuje 1
Podaj nick //tu powinienem móc wpisać nick, a przeskakuje do wpisywania hasła
Podaj hasło

0

Użyj takiej konstrukcji:

Console konsola = System.console();
nick = konsola.readLine("Podaj nick ");
pw = konsola.readLine("Podaj haslo ");

Tego kodu nie wykonasz w IDE (Eclipse, NetBeans). One tworzą własną konsolę i System.console() zwraca null.

0

Używając odczyt.nextInt() wczytujesz tylko wartość Integer, więc znak nowej lini przechwytywany jest przez nick = odczyt.nextLine(). Możesz to sprawdzić dopisując na końcu swojego kodu:

if  (nick.equals(pw))
    System.out.println("To tylko znaki enter");

i wciskając enter gdy jesteś proszony i podanie hasła.

Najłatwiejszym rozwiązaniem jest chyba dodanie *odczyt.nextLine() * zaraz po wczytywaniu wyboru.

...
    System.out.print("Co chcesz zrobić?\n" + "[1] Dodaj użytkownika\n" + "[2] xxx\n");

    int a = odczyt.nextInt();
    odczyt.nextLine(); //Wczyta znak nowej linii pozostały po instrukcji powyżej

    if (a==1)
...

Pozdrawiam

0

Użyj swinga ^^
Jedno okienko z wyborem operacji - np przyciski 1,2,3,4 gdzie 1 = dodaj, 2 usuń, 3 modyfikuj niech one np otwierają nowe okienko dla danej operacji dodajesz JTextField i nie musisz się martwić o int'y, Stringi, Boolean'y czy inne cuda bo zawartość JTextField możesz sobie przerobić na co tylko chcesz ;]

1 użytkowników online, w tym zalogowanych: 0, gości: 1