Всем привет. Я совсем новичок и все утро ломаю голову над таким вопросом. К примру, простая программа, которая записывает вопросы и ответы в массив:
import java.util.Scanner;
class proba {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Input the number of cards:");
int skolko = scan.nextInt();
String[] vopros = new String[skolko];
String[] otvet = new String[skolko];
int i = 0;
for (; i < skolko; i++) {
System.out.println("The card #" + (i + 1) + ":");
vopros[i] = scan.nextLine();
System.out.println("The definition of the card #" + (i + 1) + ":");
otvet[i] = scan.nextLine();
}
}
}
Если переменную int skolko записывать в программу (int skolko = 3;) то программа работает адекватно и запрашивает по очереди вопрос / ответ ровно 3 раза.
The card #1:
<<
The definition of the card #1:
<<
Если переменную skolko вводить через int skolko = scan.nextInt();, то программа сперва просит ввести цифру, а потом сразу выводит
The card #1:
The definition of the card #1:
<
то есть ввода значения, после The card #1: не происходит и для card #1 присваивается пустое значение ("").
Почему так?
InputStream:nextLineчитает все символы до конца строки, аnextIntпропускает все пробельные символы начиная с текущей позиции до первого символа числа, затем читает до тех пор пока идут числовые символы (останавливается, когда встречает пробельный символ или символ перевод строки, иначе падает с исключением). – StateItPrimitive Apr 10 '20 at 14:50nextLineпосле каждогоnextInt: посмотрите, пожалуйста, в конец ответа, я его дополнил информацией касательно альтернативного use-casenextInt. – StateItPrimitive Apr 10 '20 at 14:54