好吧,非常的菜鸟问题。我正在制作一个CLI应用程序,让用户可以设计调查。首先,他们输入问题,然后是选择的数量和选择。我正在使用扫描仪来获取输入,并且出于某种原因,它允许用户输入大多数内容,但不能输入问题的文本。下面的代码段。
String title = "";
Question[] questions;
int noOfQuestions = 0;
int[] noOfChoices;
Scanner entry = new Scanner(System.in);
System.out.println("Please enter the title of the survey: ");
title = entry.nextLine();
System.out.println("Please enter the number of questions: ");
noOfQuestions = entry.nextInt();
noOfChoices = new int[noOfQuestions];
questions = new Question[noOfQuestions];
for (int i = 0; i < noOfQuestions; i++) {
questions[i] = new Question();
}
for (int i = 0; i < noOfQuestions; i++) {
System.out.println("Please enter the text of question " + (i + 1) + ": ");
questions[i].questionContent = entry.nextLine();
System.out.println("Please enter the number of choices for question " + (i + 1) + ": ");
questions[i].choices = new String[entry.nextInt()];
for (int j = 0; j < questions[i].choices.length; j++) {
System.out.println("Please enter choice " + (j + 1) + " for question " + (i + 1) + ": ");
questions[i].choices[j] = entry.nextLine();
}
}
谢谢:)
答案 0 :(得分:5)
我询问您是否从扫描程序中读取noOfQuestions
的原因是因为Scanner.nextInt()
不使用分隔符(例如新行)。
这意味着下次您致电nextLine()
时,您只会从之前的readInt()
获得一个空字符串。
75\nQuestion 1: What is the square route of pie?
^ position before nextInt()
75\nQuestion 1: What is the square route of pie?
^ position after nextInt()
75\nQuestion 1: What is the square route of pie?
^ position after nextLine()
我的建议是一行一行,一直使用nextLine()
,然后使用Integer.parseInt()
进行解析。
如果这是你选择的路线,根本不需要扫描仪;你可以接受一个BufferedReader。
答案 1 :(得分:0)
nextLine()的文档说使此扫描程序超过当前行,并返回跳过的输入。可能会解释您看到的行为。只是为了验证您是否可以添加一个sysout并在title = entry.nextLine()
之后打印标题值并查看其持有的值
如果您想从输入中读取完整的一行,可能需要使用InputStreamReader combination with BufferedReader。