2016-01-09 8 views
4

ı новое в java.here - мой код. Я определил размер массива String с помощью метода nextint с помощью Scanner. Затем ı добавили строки со следующим методом. это кажется правильным для меня, но я не вижу мое первое значение массива. в чем проблема в этом коде.Первое значение массива

public class App { 
    public static void main(String[] args) { 
     String[] arr; 
     Scanner sc = new Scanner(System.in); 
     System.out.println("write a number "); 
     int n = sc.nextInt(); 
     arr = new String[n]; 

     for (int i = 0; i < n; i++) { 

      arr[i] = sc.nextLine(); 

     } 
     System.out.println(arr[0]); 

    } 
} 
+0

Я голосую, чтобы повторно открыть вопрос, поскольку выбранные вопросы и ответы для дубликата здесь плохо подходит. Этот вопрос касается очень конкретной проблемы; с другой стороны, дубликат - это вопрос с автоответчиком, который охватывает все аспекты «Сканера» в стиле учебника, и он не затрагивает эту конкретную проблему напрямую. – dasblinkenlight

ответ

5

Вы можете увидеть первую запись, это просто случается быть пустым String.

Причина этого в том, что, когда вы звоните int n = sc.nextInt(); и пользователь нажимает Enter, то Scanner считывает целое число, но оставляет символ конца-строки в буфере.

Когда вы читаете первую строку с sc.next(), окончательная строка «leftover» проверяется сразу и отображается в вашей программе как первая String, которая пуста.

Исправить эту проблему просто: позвоните по номеру sc.next() после sc.nextInt() и проигнорируйте результат.

+1

Или nextLine, в случае, если был и другой хлам. – matt

-1

Вместо

for (int i = 0; i < n; i++) { arr[i] = sc.nextLine(); } System.out.println(arr[0]); 

ли

arr[0] = sc.nextLine(); 
for (int i = 0; i < n; i++) { arr[i] = sc.nextLine(); } System.out.println(arr[0]); 

Это ошибка, которая возникает при использовании nexLine() после nextInt(), потому что nextInt() не тянет \ п от входа буфера потока, поэтому, когда вы вызываете nextLine(), он потребляет только символ \ n (nextLine() используется для потребления символов до тех пор, пока он не встретится с \ n)

+2

Пожалуйста, объясните, почему это делает то, что ожидается, поскольку это не сразу очевидно. Кроме того, пожалуйста, объясните, почему вы назначаете его, когда типичный ответ - просто игнорировать нежелательные данные. –

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