Проблема с Scanner. Аномалии значений.

 
 
 
Сообщения:28
Аномалия - когда я получаю значение с помощью сканнера, в цикле пропускается первый ввод строки, а остальные вводятся.
for(int i = 0; i < numsOfPredl; i++) {
	Predl[i] = in.nextLine();
}

Самое интересное то, что в дебаге переменная numsOfPredl является обычным числом. Даже если сразу после получения переменной дать ей другое значение, аномалия все равно проявляется.
int numsOfPredl = in.nextInt();
numsOfPredl = 2;

Если же с самого начала присвоить переменной это значение и, соответственно, не спрашивать ее, то все нормально и аномалия не проявляется.
Ps: она проявляется ТОЛЬКО в циклах и только в первой итерации, остальные нормальные.
Сам код:
public static void test(){
    Scanner in = new Scanner(System.in);
	System.out.print("Напишите количество предложений: ");
	int numsOfPredl = in.nextInt();
	numsOfPredl = 2;
	System.out.println(numsOfPredl);
	String[] Predl = new String[numsOfPredl];
	for(int i = 0; i < numsOfPredl; i++) {
		Predl[i] = in.nextLine();
	}
	for(int i = 0; i < numsOfPredl; i++) {
		System.out.println(Predl[i]);
	}
		
}
Изменен:12 апр 2019 16:34
 
 
Сообщения:249
Думаю, что первая строка в сканнер у тебя с интом заходит, там наверняка есть символ конца строки.

Почитай как этот класс работает, он не так прост, как кажется ;)

"Мы же профессионалы! Мы всегда делаем чуть больше, чем требуется!" (с)
 
 
Сообщения:28
MuH3gPaB:
Думаю, что первая строка в сканнер у тебя с интом заходит, там наверняка есть символ конца строки.

Почитай как этот класс работает, он не так прост, как кажется ;)


Суть такова - после использования in.nextInt() нельзя использовать in.nextLine(), так как первый in.nextLine "съедается". значит, мне придется костылять этим - Integer.parseInt(in.nextInt()), что поделаешь. Однако, мне все-таки интересно, почему оно так странно работает. Вряд ли программеры этого не предусмотрели.
 
 
Сообщения:89
public static void test(){
    Scanner in = new Scanner(System.in);
    System.out.print("Напишите количество предложений: ");
    int numsOfPredl = in.nextInt();
    System.out.println(numsOfPredl);
    in.nextLine();
    String[] Predl = new String[numsOfPredl];
    for(int i = 0; i < numsOfPredl; i++) {
        Predl[i] = in.nextLine();
    }
    for(int i = 0; i < numsOfPredl; i++) {
        System.out.println(Predl[i]);
    } 
}

Если тебе все-таки интересно, почему оно так странно работает, то почитай доку по классу. Что непонятно спрашивай.
Изменен:15 апр 2019 11:15
 
Модераторы:frymock
Сейчас эту тему просматривают:Нет