扫描仪不会停止输入

时间:2010-09-23 16:31:36

标签: java input java.util.scanner

好吧,非常的菜鸟问题。我正在制作一个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(); 

    }
}

谢谢:)

2 个答案:

答案 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