gpt4 book ai didi

java - 特殊字符使我的程序崩溃?

转载 作者:行者123 更新时间:2023-12-01 22:36:10 25 4
gpt4 key购买 nike

在我的程序中,我有两种模式。一个用于测验插入,另一个用于测验解决方案。每当我在字符串输入中使用特殊字符甚至空格(ShortAnswerQuestion 或 FillInTheBlank)时,我都会收到运行时错误,或者我的程序会进入 future 2 或 3 个步骤。没有空格/特殊字符,工作得很好。有什么办法可以解决这个问题吗?这是我的主要内容:

公共(public)类 QuizApplication {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
int n,m,l;
System.out.println("This is the insertion mode\n");
System.out.println("How many short-answer questions would you like to include in your quiz?");
n=s.nextInt();
ShortAnswerQuestion[] qu0= new ShortAnswerQuestion[n];
int i;
for(i=0;i<n;i++){
System.out.println("Please insert question "+(i+1)+": ");
String Q0=s.next();
System.out.println("Please insert the correct answer: ");
String A0=s.next();
qu0[i]=new ShortAnswerQuestion(Q0,A0);


}
System.out.println("How many fillin the blank questions would you like to include in your quiz?");
m=s.nextInt();
FillInBlankQuestion[] qu1= new FillInBlankQuestion[m];
int o;
for(o=0;o<m;o++){
System.out.println("Please insert question "+(o+1)+": ");
String Q1=s.next();
System.out.println("Please insert the correct answer: ");
String A1=s.next();
qu1[o]=new FillInBlankQuestion(Q1,A1);
}
System.out.println("How many true or false questions would you like to include in your quiz?");
l=s.nextInt();
TrueFalseQuestion[] qu2= new TrueFalseQuestion[l];
int x;
for(x=0;x<l;x++){
System.out.println("Please insert question "+(x+1)+": ");
String Q2=s.next();
System.out.println("Please insert the correct answer: ");
boolean A2=s.nextBoolean();
qu2[x]=new TrueFalseQuestion(Q2,A2);


}
System.out.println("Moving to Quiz Mode\n");
System.out.println("Short-answer questions:\n");
for(i=0;i<n;i++){
System.out.println("Question "+(i+1)+" \n"+qu0[i].getMyText());

System.out.println(qu0[i].CheckAnswer(qu0[i].GetAnswer()));
}
System.out.println("\nFill-in the blank questions:\n");
for(o=0;o<m;o++){
System.out.println("Question "+(o+1)+" \n"+qu1[o].getMyText());

System.out.println(qu1[o].CheckAnswer(qu1[o].GetAnswer()));
}
System.out.println("\nTrue or False questions:\n");
for(x=0;x<l;x++){
System.out.println("Question "+(x+1)+" \n"+qu2[x].getMyText());

System.out.println(qu2[x].CheckAnswer(qu2[x].GetAnswer()));
}
System.out.println("END OF QUIZ");

}}

最佳答案

您正在使用 s.next(),它读取单个单词,而您应该使用 s.nextLine(),它读取整行。

要解决此问题,您需要更改每个

s.next()

s.nextLine()

但是您还需要在调用 s.nextInt()s.nextBoolean() 之后添加额外的 s.nextLine() 。原因是 s.nextInt()s.nextBoolean() 不会读取它们读取的值后面的行尾字符。所以你写的地方

l=s.nextInt();

你实际上想要

l=s.nextInt();
s.nextLine();

最后,使用单字母变量名是一个非常糟糕的主意。它使您的代码更难以阅读和理解。最好使用变量名称来说明每个变量的用途。

关于java - 特殊字符使我的程序崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26855204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com