2013-02-15 2 views
0

Так что это код, я использую:Сканер nextLine является пропуску

System.out.println("Create a name."); 
name = input.nextLine(); 
System.out.println("Create a password."); 
password = input.nextLine(); 

Но когда она достигнет этой точки он просто говорит: «Создать имя.» и «Создать пароль». оба в то же время, а затем я должен что-то напечатать. Таким образом, в основном пропускаются части сканера, где мне нужно набирать строку. После «Создать имя». и «Создать пароль». распечатывается и я печатаю тогда, как имя, так и пароль меняются на то, что я ввел. Как это исправить?

Это полный класс. Я просто тестирую, поэтому на самом деле это не будет программа:

package just.testing; 

import java.util.Scanner; 
public class TestingJava 
{ 
    static int age; 
    static String name; 
    static String password; 
    static boolean makeid = true; 
    static boolean id = true; 

    public static void main(String[] args){ 
     makeid(null); 
     if(makeid == true){ 
      System.out.println("Yay."); 
     }else{ 

     } 
    } 
    public static void makeid(String[] args){ 
     System.out.println("Create your account."); 
     Scanner input = new Scanner(System.in); 
     System.out.println("What is your age?"); 
     int age = input.nextInt(); 
     if(age<12){ 
      System.out.println("You are too young to make an account."); 
      makeid = false; 
      return; 
     } 
     System.out.println("Create a name."); 
     name = input.nextLine(); 
     System.out.println("Create a password."); 
     password = input.nextLine(); 
     return; 
    } 
} 

И извините за мою плохую грамматику. Я не английский, поэтому мне трудно объяснить это.

+0

Вы правильно объявили и инициализировали «Сканер» –

+0

Да: «Вход сканера = новый сканер (System.in);» –

+1

Вам необходимо убедиться, что вы инициализируете сканер с помощью System.in. Edit: ah, ok – Nathan

ответ

10

nextInt() съел вводимое число, но не Eoln:

Create your account. 
What is your age? 
123 <- Here's actually another '\n' 

поэтому первый вызов nextLine() после того, как создать имя признать, что в качестве входных данных.

System.out.println("Create a name."); 
name = input.nextLine(); <- This just gives you "\n" 

Integer.parseInt пользователя (input.nextLine()) или добавить еще один input.nextLine() после прочтения числа будет решить эту:

int age = Integer.parseInt(input.nextLine()); 

или

int age = input.nextInt(); 
input.nextLine() 

Также см. here для дублированного вопроса.

+0

Так как я могу это исправить? –

+0

отредактирован, чтобы показать исправление. –

+0

Спасибо, что сработало. Я все еще не знаю, почему Int это делает, хотя ... –

1

Это оленья кожа на самом деле сказать вам, почему линии пропуска, но, как вы захватить имена и пароли можно использовать консоль:

Console console = System.console(); 
String name = console.readLine("Create a name."); 
char[] password = console.readPassword("Create a password."); 
System.out.println(name + ":" + new String(password)); 
+0

Не работает, потому что я могу снова использовать метод позже, а затем пароль String уже сделан ... –

0

Вы также можете использовать следующие() вместо nextLine(). Я тестировал его в затмении. его рабочий штраф.

0

next() будет работать, но он не будет читать строку после пробела.

Смежные вопросы