随机化用Java读取的文本文件

前端之家收集整理的这篇文章主要介绍了随机化用Java读取的文本文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图用 Java读取一个文本文件,基本上是一组问题.有四个选择和一个答案.结构如下所示:

question

option a

option b

option c

option d

answer

我这样读它没有问题:

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();}


}




}

上面的代码是可预测的. 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!");
}

这是我用于随机化的方法

public static int random(int min,int max){
    int xx;
    xx= (int) ( Math.random() * (max-min + 1))+ min;
    return xx;
    }

我有可能得到一个null.你可以建议我这样做,以便在尝试随机化问题时不会出现空值?

你能看到我的程序有什么不对吗?

解决方法

您在代码中使用了所有类型的 magic numbers,这些数字没有多大意义.
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]);

这些都应该是相同的数字,对吗?如果我们有25个问题,我们应该有25个空间,25个读取并使用25个.

如何解决这个问题:

1保持不变

public final static int NUMBER_OF_QUESTIONS = 25;

然后在制作阵列时使用它,阅读问题并在随机拍摄时:

public static String[] q=new String[NUMBER_OF_QUESTIONS];

for(ar=0;ar<NUMBER_OF_QUESTIONS;ar++){

int ran= random(1,NUMBER_OF_QUESTIONS);

2使用q.length

public static String[] q=new String[NUMBER_OF_QUESTIONS];

for(ar=0;ar<q.length;ar++){

int ran= random(1,q.length);

3使用列表/集合

public static List<String> q=new List<String>();

for(ar=0;ar<q.size();ar++){

int ran= random(1,q.size());

选项3将是最佳选择,这是java毕竟.有关更多详细信息,请参阅Mike的答案.

猜你在找的Java相关文章