如何比较两个数组。从文件中获取的一个数组和另一个数组是随机数?

时间:2014-03-21 07:36:42

标签: java arrays

这就是我得到的。我可以看到两个数组但是在比较时我得到了一个错误的答案。我在编译和运行时得到了很多错误的输出但是输入了36个结果(布尔值)我得到180个布尔结果。

import java.io.*;
import java.util.*;



public class Lotto {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws FileNotFoundException
{
    userNumbers();
    drawNumbers();  
}
public static void userNumbers()throws FileNotFoundException
{
     Scanner in = new Scanner(new FileReader("lotto.dat")); //In this file there is 6 integer

 while(in.hasNext())
 {
     if(in.hasNextInt())
     {
        //in.next();
        System.out.println(in.nextLine());
     }
     else
     System.out.print(in.next()+ " ");
 }

}
public static void drawNumbers() throws FileNotFoundException
{
     int N = 6;// 6 Random Numbers
     int[] lottoNumber = new int[N];
     int[] userNumber = new int[N];
     //This generate random numbers of size N
     for (int i = 0; i < N; i++) 
     {
        Random n = new Random(); 
        lottoNumber[i] = n.nextInt(20)+1;
        System.out.print(lottoNumber[i]+" ");           
     }

     Scanner dat = new Scanner(new FileReader("lotto.dat"));
        int i=0;
        while(dat.hasNextInt())
        {
           userNumber[i++]=dat.nextInt();

           System.out.println("");
           doCompare(lottoNumber, userNumber); 
        }


}
  public static void doCompare(int[] a, int[] b) {
   for(int i = 0; i < a.length; i++)
  {
for(int j = 0; j < b.length; j++)
{
    if(a[i] == b[j])
    {
        System.out.print("True");//true
    }
    else
    {
        System.out.print("false");``
    }
}
}}}

4 个答案:

答案 0 :(得分:2)

对我来说它打印216个布尔值,因为应该打印36的函数执行6次,对于lotto.dat中的每个整数,你只需要改变:

while(dat.hasNextInt())
{
   userNumber[i++]=dat.nextInt();
   System.out.println("");
   doCompare(lottoNumber, userNumber); 
}

while (dat.hasNextInt())
{
    userNumber[i++] = dat.nextInt();
}
System.out.println();  //<-- Do the newline out of the loop too
doCompare(lottoNumber, userNumber);

现在您的输出将是一行,包含36个布尔值:

falsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalseTruefalsefalsefalseTruefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalse

答案 1 :(得分:2)

您在填充userNumber之前与文件中的所有数字进行比较。您只需将语句doCompare(lottoNumber, userNumber)移到while循环之外:

while (dat.hasNextInt()) {
       userNumber[i++] = dat.nextInt();

  System.out.println("");
  //doCompare(lottoNumber, userNumber);
}

doCompare(lottoNumber, userNumber);

答案 2 :(得分:1)

你有这个:

while(dat.hasNextInt())
{
   userNumber[i++]=dat.nextInt();
   System.out.println("");
   doCompare(lottoNumber, userNumber); 
}

每次从文件中读取数字时,都在运行比较。你想要做的事情就是从文件中读取所有内容,然后运行比较 - 所以你应该这样做。你可能的意思是:

while(dat.hasNextInt())
{
   userNumber[i++]=dat.nextInt();
   System.out.println(""); // <- This probably isn't useful, either.
}
doCompare(lottoNumber, userNumber); 

顺便说一下,如果你得到180个结果,因为5 * 36 = 180表示你只是从文件中读取5个数字。你确定文件中有6个数字,或者你真的得到216个结果吗?

答案 3 :(得分:1)

由于每次从文件中读取下一个数字时都在运行doCompare函数,因此您运行此例程6 * 36次;因为你只得到180个结果,看起来你的文件中没有6个数字,但很可能只有5个!

移动你的doCompare() - 在while (dat.hasNextInt())循环之外调用你应该没问题!