我在编写一个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 ("");
}
}
答案 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.
除非您在控制台上输入内容,否则控制流将在此时停留。