use*_*269 6 java text-files bufferedreader
我试图用Java读取一个文本文件,基本上是一组问题.有四个选择和一个答案.结构如下所示:
题
选项a
选项b
选项c
选项d
回答
我这样读它没有问题:
public class rar{
public static String[] q=new String[50];
public static String[] a=new String[50];
public static String[] b=new String[50];
public static String[] c=new String[50];
public static String[] d=new String[50];
public static char[] ans=new char[50];
public static Scanner sr= new Scanner(System.in);
public static void main(String args[]){
int score=0;
try {
FileReader fr;
fr = new FileReader (new File("F:\\questions.txt"));
BufferedReader br = new BufferedReader (fr);
int ar=0;
for(ar=0;ar<2;ar++){
q[ar]=br.readLine();
a[ar]=br.readLine();
b[ar]=br.readLine();
c[ar]=br.readLine();
d[ar]=br.readLine();
String tempo=br.readLine();
ans[ar]=tempo.charAt(0);
System.out.println(q[ar]);
System.out.println(a[ar]);
System.out.println(b[ar]);
System.out.println(c[ar]);
System.out.println(d[ar]);
System.out.println("Answer: ");
String strans=sr.nextLine();
char y=strans.charAt(0);
if(y==ans[ar]){
System.out.println("check!");
score++;
System.out.println("Score:" + score);
}else{
System.out.println("Wrong!");
}
}
br.close();
} catch (Exception e) { e.printStackTrace();}
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码是可预测的.for循环只是递增.它会根据订单显示问题.
我想要做的是能够随机化文本文件,但仍然保持相同的结构.(q,a,b,c,d,ans).但是当我尝试这样做时:
int ran= random(1,25);
System.out.println(q[ran]);
System.out.println(a[ran]);
System.out.println(b[ran]);
System.out.println(c[ran]);
System.out.println(d[ran]);
System.out.println("Answer: ");
String strans=sr.nextLine();
char y=strans.charAt(0);
if(y==ans[ran]){
System.out.println("check!");
score++;
System.out.println("Score:" + score);
}else{
System.out.println("Wrong!");
}
Run Code Online (Sandbox Code Playgroud)
这是我用于随机化的方法:
public static int random(int min, int max){
int xx;
xx= (int) ( Math.random() * (max-min + 1))+ min;
return xx;
}
Run Code Online (Sandbox Code Playgroud)
我有可能得到一个null.你可以建议我这样做,以便在尝试随机化问题时不会出现空值?
你能看到我的程序有什么不对吗?
您在代码中使用了各种神奇的数字,这些数字没有多大意义。
public static String[] q=new String[50]; //why make an array to hold 50 questions?
//...
for(ar=0;ar<2;ar++){ //why read 2 questions?
//...
int ran= random(1,25); //why take one of 25 questions?
System.out.println(q[ran]);
Run Code Online (Sandbox Code Playgroud)
这些应该都是相同的数字,对吧?如果我们有 25 个问题,我们应该有空间容纳 25 个问题,阅读 25 个问题并使用 25 个问题。
public final static int NUMBER_OF_QUESTIONS = 25;
Run Code Online (Sandbox Code Playgroud)
然后在制作数组、阅读问题以及随机抽取问题时使用它:
public static String[] q=new String[NUMBER_OF_QUESTIONS];
for(ar=0;ar<NUMBER_OF_QUESTIONS;ar++){
int ran= random(1,NUMBER_OF_QUESTIONS);
Run Code Online (Sandbox Code Playgroud)
public static String[] q=new String[NUMBER_OF_QUESTIONS];
for(ar=0;ar<q.length;ar++){
int ran= random(1,q.length);
Run Code Online (Sandbox Code Playgroud)
public static List<String> q=new List<String>();
for(ar=0;ar<q.size();ar++){
int ran= random(1,q.size());
Run Code Online (Sandbox Code Playgroud)
选项3将是最好的选择,毕竟这是java。有关使其更加 Java 化的更多详细信息,请参阅 Mike 的回答。