Java 如何将文件中的现有数字与随机数字进行比较?

Java 如何将文件中的现有数字与随机数字进行比较?,java,random,while-loop,compare,Java,Random,While Loop,Compare,我正在做一个练习,我必须做一个“乐透游戏” 我已经生成了6个随机数(rand1,rand2,rand3,rand4,rand5,rand6),现在我必须将它们与保存在文件f中的现有数字进行比较。我想一次将每个随机数与我保存在文件中的数字进行比较 到目前为止,我得到的是: public class lottoEx{ public static void main(String[] args)throws Exception{ userNumbers(4, 5, 7, 9, 1

我正在做一个练习,我必须做一个“乐透游戏”

我已经生成了6个随机数(
rand1
rand2
rand3
rand4
rand5
rand6
),现在我必须将它们与保存在文件
f
中的现有数字进行比较。我想一次将每个随机数与我保存在文件中的数字进行比较

到目前为止,我得到的是:

public class lottoEx{

   public static void main(String[] args)throws Exception{

      userNumbers(4, 5, 7, 9, 11, 19);

      drawNumbers();


   }

   public static void userNumbers(int num1, int num2, int num3, int num4, int num5, int num6)throws Exception{ //USER NUMBERS

      File f = new File("lotto.dat");

      PrintStream output = new PrintStream(f);

      output.println(num1 + " " + num2 + " " +  num3 + " " + num4 + " " + num5 + " " + num6);

      Scanner read = new Scanner(f);

      System.out.print("Your numbers: ");

      while(read.hasNext()){

         System.out.print(read.nextInt() + " ");

      }

   }

   public static void drawNumbers()throws Exception{ //RANDOM NUMBERS

      Random rand = new Random();

      int rand1 = rand.nextInt(19)+1;
      int rand2 = rand.nextInt(19)+1;
      int rand3 = rand.nextInt(19)+1;
      int rand4 = rand.nextInt(19)+1;
      int rand5 = rand.nextInt(19)+1;
      int rand6 = rand.nextInt(19)+1;

      Thread.sleep(2000);

      System.out.println();
      System.out.println();

      System.out.print("The lotto numbers are: ");

      Thread.sleep(2000);

      System.out.print(rand1 + " " + rand2 + " " + rand3 + " " + rand4 + " " + rand5 + " " + rand6);

         doCompare(rand1, rand2, rand3, rand4, rand5, rand6);

         winCheck();

   }

   public static void doCompare(int rand1, int rand2, int rand3, int rand4, int rand5, int rand6)throws Exception{

      Scanner scan = new Scanner("lotto.dat");

      Set<Integer> set = new HashSet<>();

      while(scan.hasNextInt()){
         set.add(scan.nextInt());    
      }
      System.out.println(set);

      if(set.contains(rand1)){

         System.out.println("Match on rand1");

      }

   }

   public static void winCheck()throws Exception{

      //code goes here

   }

}
公共类彩票{
公共静态void main(字符串[]args)引发异常{
用户号码(4、5、7、9、11、19);
数字();
}
公共静态void userNumbers(intnum1、intnum2、intnum3、intnum4、intnum5、intnum6)引发异常{//USER number
文件f=新文件(“lotto.dat”);
打印流输出=新打印流(f);
输出.println(num1+“”+num2+“”+num3+“”+num4+“”+num5+“”+num6);
扫描仪读取=新扫描仪(f);
系统输出打印(“您的号码:”);
while(read.hasNext()){
System.out.print(read.nextInt()+);
}
}
public static void drawNumbers()引发异常{//随机数
Random rand=新的Random();
int rand1=rand.nextInt(19)+1;
int rand2=rand.nextInt(19)+1;
int rand3=rand.nextInt(19)+1;
int rand4=rand.nextInt(19)+1;
int rand5=rand.nextInt(19)+1;
int rand6=rand.nextInt(19)+1;
《睡眠》(2000年);
System.out.println();
System.out.println();
系统输出打印(“乐透号码是:”);
《睡眠》(2000年);
系统输出打印(rand1+“”+rand2+“”+rand3+“”+rand4+“”+rand5+“”+rand6);
文件公司(排名1、排名2、排名3、排名4、排名5、排名6);
winCheck();
}
公共静态void doCompare(int rand1、int rand2、int rand3、int rand4、int rand5、int rand6)引发异常{
扫描仪扫描=新扫描仪(“lotto.dat”);
Set=newhashset();
while(scan.hasNextInt()){
set.add(scan.nextInt());
}
系统输出打印项次(套);
if(集合包含(随机数1)){
System.out.println(“与rand1匹配”);
}
}
public static void winCheck()引发异常{
//代码在这里
}
}

似乎有些地方出错了,因为它只将随机数与我文件中的第一个数字进行比较?我现在有点困了。希望有人能帮助我!:-)

一种简单有效的方法是将文件中的所有数字存储在一个
集合中,然后为每个随机数查找集合。这样,您只需读取文件一次

Set<Integer> set = new HashSet<>();

while(scan.hasNextInt()) {
    set.add(scan.nextInt());
}

if (set.contains(rand1)) {
    System.out.println("MATCH on rand1: " + rand1);
}

// repeat for rand2, rand3..etc
Set Set=newhashset();
while(scan.hasNextInt()){
set.add(scan.nextInt());
}
if(集合包含(随机数1)){
System.out.println(“在rand1上匹配:+rand1”);
}
//对rand2、rand3等重复上述步骤
这里尝试使用存储生成的数字和使用构造函数,该构造函数将文件作为参数

public static void main(String[] args) throws FileNotFoundException {
    final Set<Integer> lottoResults = new HashSet<>();
    final Random rnd = new Random(System.currentTimeMillis());

    // generate numbers
    while (lottoResults.size() < 6) {
        lottoResults.add(rnd.nextInt(49) + 1);
    }

    final Scanner in = new Scanner(new File("path\\to\\yourLottoFile.txt"));
    for (String s : in.nextLine().split(",")) {
        final int lottoGuess = Integer.parseInt(s);
        // maybe some error handling here (invalid / wrong input)?

        System.out.printf("The guess: %2d is %s\n", lottoGuess, (lottoResults.contains(lottoGuess) ? "correct!!!" : "incorrect"));
    }
}

它只包含6个数字:4、10、7、5、11、19.你应该考虑使用数组来存储你的值。边注:你不必使用“代码> BuffeDeRead + FieleRead < /代码>作为扫描仪的参数。您可以只传递文件名。仅用分隔符分隔space@user3703289-直接使用-
新扫描仪(文件名)
并尝试..非常感谢!我明白这个方法背后的想法,但是!即使我在我的游戏机里找到了号码,它仍然没有出现“匹配结果”:你的号码:45 7 9 11 19乐透号码是:7 10 4 7 2 6这能与我的方法有关吗?rand numbs是从哪里来的?方法的调用方式如下:doCompare(rand1,rand2,rand3,rand4,rand5,rand6);我就是这样开始我的方法的:publicstaticvoiddocompare(intrand1,intrand2,intrand3,intrand4,intrand5,intrand6)也许文件没有正确读取。在while循环之后,尝试查看集合的内容。您可以调试或打印内容。此外,也许您应该用完整的代码更新问题,包括调用方法。因此,现在我用完整的代码更新了我的问题。如您所见,我打印了集合,但输出仅为“[]”。不知何故,它没有填写lotto.dat中的数字?首先将扫描仪更改为
新扫描仪(新文件(“lotto.dat”)
。其次,从方法
drawNumbers()
,您正在使用随机数调用
doCompare()
,这些随机数在每次运行程序时都会发生变化。有时会有0个匹配项,有时会有一个或多个匹配项。那么
userNumbers()
有什么用呢?
The guess:  4 is incorrect
The guess: 10 is incorrect
The guess:  7 is incorrect
The guess:  5 is incorrect
The guess: 11 is correct!!!
The guess: 19 is incorrect