我在洗牌问题上遇到了问题,后来在他们面前放了数字。现在,下面的代码是从csv文件中获取问题和可能的答案。它会改变选择,然后纠正答案并对其进行评分。当人们想要时,代码也会停止。(我因为没有必要而剪掉代码) 我试图改变问题,但它没有工作(有关于我尝试的可见代码),而且我不知道如何编号。欢迎任何想法!
import java.io.BufferedReader;
import java.io.FileReader;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class misasiseeon {
@SuppressWarnings("rawtypes")
public static void main(String[] args) throws Exception {
int questionsCorrect = 0;
int questionsAnswered = 0;
boolean finish = false;
String splitBy = ",";
BufferedReader br = new BufferedReader(new FileReader("/FilePath"));
String line = br.readLine();
while ((line = br.readLine()) != null) {
String[] b = line.split(splitBy);
String question = (b[0]);
String answer1 = (b[1]);
String answer2 = (b[2]);
String answer3 = (b[3]);
String answer4 = (b[4]);
String answer5 = (b[5]);
String finish1 = (b[6]);
ArrayList<String> questions = new ArrayList<>();
questions.add(question);
Collections.shuffle(questions);
ArrayList<String> answers = new ArrayList<>();
vastused.add(answer1);
vastused.add(answer2);
vastused.add(answer3);
vastused.add(answer4);
vastused.add(answer5);
Collections.shuffle(answers);
System.out.println(questions);
System.out.println(answers);
}
}
}
}
答案 0 :(得分:1)
您已宣布并初始化了&#34;问题&#34;循环中的ArrayList。这会在循环的每次迭代中从头开始重新创建ArrayList。然后,您每次都会混洗一个包含1个元素的列表。您应该将问题ArrayList定义移到循环之外。
另一个问题是问题与答案的关联。要做到这一点,最好创建一个名为QuestionAndAnswers的新类,其实例变量将包含一个问题及其可能的答案。而不是单独的问题和答案列表,创建QuestionAndAnswers的ArrayList。在循环中填充该列表,然后随机播放等。
答案 1 :(得分:0)
您正在创建并随机播放名为answers
的列表,但您要为名为vastused
的列表添加答案。
从此改变:
ArrayList<String> answers = new ArrayList<>();
vastused.add(answer1);
vastused.add(answer2);
vastused.add(answer3);
vastused.add(answer4);
vastused.add(answer5);
Collections.shuffle(answers);
对此:
List<String> answers = new ArrayList<>();
answers.add(answer1);
answers.add(answer2);
answers.add(answer3);
answers.add(answer4);
answers.add(answer5);
Collections.shuffle(answers);
另请注意answers
类型从ArrayList
更改为List
- 请参阅Liskov substitution principle