2016-09-18 3 views
1

Ожидается, что следующая программа примет количество входных строк T в массиве String и отобразит их. Но он принимает и отображает одну строку меньше ожидаемой. Почему это так? Программа:Строковый массив не принимает ожидаемое количество входов

import java.util.Scanner; 

public class JavaApplication1 
{ 

    public static void main(String[] args) 
    { 
     Scanner sc = new Scanner(System.in); 
     int T = sc.nextInt(); 
     String s[] = new String[50]; 
     for (int i = 0; i < T; i++) 
     { 
     s[i] = sc.nextLine(); 
     } 

     for (int i = 0; i < T; i++) 
     { 
      System.out.println(s[i]); 
     } 
    } 

} 
+0

Возможный дубликат [Сканер пропускает nextLine() после использования next(), nextInt() или других методов nextFoo()] (http://stackoverflow.com/questions/13102045/scanner -is-skipping-nextline-after-use-next-nextint-or-other-nextfoo) – resueman

+0

Это не дубликат этого вопроса. Заданный вопрос включает использование 'nextInt' вместе с 'nextLine'. Мой вопрос состоит только из 'nextLine'. – Sparsh

+1

Он имеет 'nextInt', когда вы запрашиваете у пользователя' T'. – resueman

ответ

1

Причиной такой ситуации является то, что линии:

int T = sc.nextInt(); 

читает только значение INT, и остается в той же строке, так следующее выполнение nextLine () читает из той же строки, которая содержит целое значение.
Чтобы избежать этой ситуации, вы можете использовать:

int T = Integer.parseInt(sc.nextLine()); 

Для более, вы можете посмотреть here.

+0

Спасибо, Михал. Я попробую. – Sparsh

+0

Если это вам помогло, примите мой ответ. –

-1

Попробуйте сделать это:

public static void main(String[] args) 
{ 
    Scanner sc = new Scanner(System.in); 
    System.out.println("Number?"); 
    int x = sc.nextInt(); 
    String[] s = new String[x]; 
    System.out.println("Words?"); 
    for (int i = 0; i < x; i++) 
    { 

     s[i] = sc.next(); 
     //s[i] = sc.nextLine(); 
    } 

    for (int i = 0; i < x; i++) 
    { 
     System.out.println(s[i]); 
    } 
    System.out.println("End."); 

Заменить nextLine на следующий() ... Это, кажется, есть причина, чтобы получить это событие, когда вы используете nextLine ...? я удивляюсь ...

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