扫描仪不会扫描

时间:2012-02-17 05:26:42

标签: java

我在编写一个hw程序时遇到了问题,该程序用于生成具有多项选择和论文问题的测试。一切都有效,除了我的程序在阅读论文课的一部分时跳过行。我知道它与扫描仪和scan.nextline,scan.nextInt和scan.next等有关,但我对如何解决它感到困惑。

感谢您的帮助。

import java.util.*;

public class TestWriter
{
    public static void main (String [] args)
    {
        Scanner scan = new Scanner (System.in);
        String type=null;
        System.out.println ("How many questions are on your test?");
        int num = scan.nextInt ();
        Question [] test = new Question [num];
        for (int i=0; i <num; i++)
        {
            System.out.println ("Question " + (i+1) + ": Essay or multiple choice question? (e/m)");
            type = scan.next ();
            scan.nextLine ();
            if (type.equals ("e"))
            {
                test [i] = new Essay ();
                test [i].readQuestion ();
            }
            if (type.equals ("m"))
            {
                test [i] = new MultChoice ();
                test [i].readQuestion ();
            }
        }

        for (int i=0; i <num; i++)
        {
            System.out.println ("Question " + (i+1)+": "+ type);
            test [i].print ();
        }
    }
}

这是论文课

public class Essay extends Question
{
    String question;
    int line;
    public void readQuestion ()
    {
        System.out.println ("How many lines?");
        line = scan.nextInt ();
        scan.next ();
        System.out.println ("Enter the question");
        question = scan.nextLine ();
    }
    public void print ()
    {
        System.out.println (question);
        for (int i=0; i <line; i++)
        System.out.println ("");
    }
}

3 个答案:

答案 0 :(得分:2)

使用scan.nextInt()会产生以下问题 如果输入为“5 5”,则nextInt()将获得下一个整数,留下缓冲线的剩余“5”。其中“5”将被

抓住

type = scan.next();

在班级测试作者中:

  System.out.println("How many questions are on your test?");
  int num = scan.nextInt();
  Question[] test = new Question[num];  for(int i=0; i<num; i++)
  {
   System.out.println("Question " + (i+1) + ": Essay or multiple choice question? (e/m)");

    type = scan.next();

这将产生我上面提到的问题。

要解决此问题,您可以

a)确保输入只是一个数字

b)像String temp = scan.nextLine();那样获取整行,然后将其转换为整数。这样您就可以使用字符串并检查它是否是您需要的输入,即第一个字母/数字组是e / m还是整数。

scan.nextInt()的问题在于它只获取输入行的下一个整数。如果在输入之后有空格,即从“5 5”中取出,它将只抓住下一个整数5并留下“5”。

因此我建议使用scan.nextLine()并操纵字符串以确保输入可以被处理和验证,同时确保您不会对扫描仪所处的位置感到困惑。

你应该使用.next()/ .nextInt()如果你正在处理一个你要特别捕获的各种参数的输入,例如“25 Male Student 1234”,在这种情况下,代码将是这样的

int age = scan.nextInt(); 
String sex = scan.next(); 
String job = scan.next(); 
int score = scan.nextInt();

答案 1 :(得分:0)

您的readQuestion功能应该是......

public void readQuestion()
 {
  System.out.println("How many lines?");
  line = scan.nextInt();
  scan.nextLine();
  System.out.println("Enter the question");

  question = scan.nextLine();

 }

应该{​​{1}}在末尾添加一个空的新行

答案 2 :(得分:0)

在你的TestWriter.main()方法中,你期望在以下代码中的3行:

System.out.println("Question " + (i+1) + ": Essay or multiple choice question? (e/m)");

type = scan.next();
scan.nextLine();     //LINE 3: What are you expecting user to enter over here.

除非您在控制台上输入内容,否则控制流将在此时停留。