Java 从文件中读取数字并对照随机生成进行检查

Java 从文件中读取数字并对照随机生成进行检查,java,math,random,variable-assignment,Java,Math,Random,Variable Assignment,目标: 生成一个随机整数(1-99)并使用numbers.dat文件(来自上一个实验室)确定生成的随机数是否在该文件中。不要计算找到随机数的次数,只需输出它是否在文件中 可能的伪代码: 从1-99生成一个随机# 声明布尔变量并将其初始化为false 循环直到找到文件或匹配项的结尾:读取编号 比较数字。如果匹配,则将布尔值设置为true 如果布尔值为true,则已找到数字,否则未找到 第二部分。将第1部分中的所有代码放入for循环中,使第1部分运行3次。 B输出–与以下输出类似: 文件中有随机数3

目标:

生成一个随机整数(1-99)并使用numbers.dat文件(来自上一个实验室)确定生成的随机数是否在该文件中。不要计算找到随机数的次数,只需输出它是否在文件中

可能的伪代码:

  • 从1-99生成一个随机#
  • 声明布尔变量并将其初始化为false
  • 循环直到找到文件或匹配项的结尾:读取编号
  • 比较数字。如果匹配,则将布尔值设置为true
  • 如果布尔值为true,则已找到数字,否则未找到
  • 第二部分。将第1部分中的所有代码放入for循环中,使第1部分运行3次。 B输出–与以下输出类似:

    文件中有随机数35。
    随机数10不在文件中。
    随机数9在文件中。
    
    我的代码:

    import java.util.*;
    导入java.io.*;
    公共类随机数{
    公共静态void main(字符串[]args)引发异常{
    Scanner num=新扫描仪(新文件(“numbers.dat”);
    Random ran=新的Random();
    while(num.hasNext()){
    int number=num.nextInt();
    int x=ran.nextInt(100);;
    如果(数字==x){
    System.out.println(“文件中有数字“+x+”);
    }
    否则{
    System.out.println(“文件中没有数字“+x+”);
    }
    }
    }
    }
    
    输出:

    文件中没有数字80
    52号不在文件中
    文件中没有数字50
    编号76不在文件中
    数字21在文件中
    数字18不在文件中
    文件中没有数字40
    (为了简要说明而删去)
    
    文件内容:

    16 43 56 8 12 35 65 12 26 3 65 4 75 86 9 79 0 78 5 78 4 63 65 3 64 7 87 6 96 70 7 95 78 46 4 37 46 3 53 93 84 76 56 48 93 3 74 76 5 47 38 4 39 4 57 46 37 48 4 9 84 7 36 0 58 6 7 84 7 7 5 6 4 30 4 8 4 4 4 4 55 4 47 5 85 74 2 45 48 73 5 21 42 21 55 1
    

    我到底做错了什么除了没有将输出嵌套在for循环中之外,这些数字的大部分都在文件中。我试图将其与我创建的随机数匹配,如果它们相等,则将其输出到文件中,然后继续指示该数字是否在文件中。如果您能提供任何帮助,我将不胜感激,我对此感到非常困惑,我似乎无法理解

    好,您所做的只是对照文本文件中的一个数字检查随机数,然后对照文本文件中的下一个数字检查新的随机数。如果你移动int x-ran。。。在循环之外,它应该是好的,因此:

    import java.util.*;
    import java.io.*;
    public class RandomNumberMatch
    {
      public static void main(String[] args) throws Exception
      {
         Scanner num = new Scanner (new File ("numbers.dat"));
         Random ran = new Random();
         int x = ran.nextInt(100);
         int number;
         boolean hasNumber = false;
         while(num.hasNext())
         {
            number = num.nextInt();
    
            if(number == x)
            {
               System.out.println("The number " + x + " is in the file");
               hasNumber = true;
            }    
         }
         if(!hasNumber){
             System.out.println("The number " + x + " is not in the file");
         }
        }
       }
    

    因为这看起来像是一个学校作业,我不会给你答案的代码,但想想这些问题:

    您需要确定整个文件中是否存在随机数。因此,如果您将其与文件中的单个数字进行比较,您是否有足够的信息来做出“该数字不在文件中”的明确声明


    如果您已经找到了要查找的号码,是否有必要继续循环浏览整个文件?

    好的。我知道这是一个实验室——我有数百个——不幸的是,就像在现实生活中一样,它们往往没有很好的要求。通常不是因为他们不知道如何编写适当的需求,而是因为他们不知道如何编写适当的需求。因此,让我们从分析您的需求(目标)开始:

    生成一个随机整数(1-99)并使用numbers.dat文件(来自上一个实验室)确定生成的随机数是否在该文件中

    我认为这是非常清楚的关于做什么,有文字和方法来存档它(我的意思是没有人说在这句话中使用Java,但cmon你可能在Java实验室:)。因此,让我们继续,因为有更多的“客户”要求(我们想统计我们的客户,因为他不会给我们任何钱买啤酒)

    不要计算找到随机数的次数,只需输出它是否在文件中

    好的,我们这里有第一期(第1期)。我们知道我们不需要计数,但我们现在是否自动知道我们是否必须在第一次出现时只输出一次,或者一个数字可能在文件中出现多次,并且我们的客户希望每次出现时都输出一次

    在实际的现场硬化中,这些细节是需求工程师的工作。 但是等等,还有更多!我们的客户知道伪代码这个词!他已经对解决方案应该如何在内部工作有了更详细的想法,但是我们必须对这个伪代码非常小心,因为我们不知道客户是否知道他在做什么(不幸的是,通常情况下,我们的工作不仅仅是产生一个解决方案,而是找出它应该是什么样子)。好,我们继续:

    可能(例如可能是解决方案()!!!伪代码:

    从1-99生成随机#声明并将布尔变量初始化为false

    情况清楚,让我们继续:

    循环直到找到文件匹配的结尾:

    哦-我们有一个选择,它直接影响到我们的公开发行的第1期!(糟糕的要求!)让我们称之为第2期,然后继续“什么是匹配”

    读取数字。比较数字。如果匹配,则将布尔值设置为true。如果布尔值为true,则找到数字,否则找不到

    如果我必须知道找到的数字,将布尔值设置为true以指示找到的数字,我几乎不会质疑布尔值的必要性,“但这主要是因为我们不想在第一次匹配时结束程序,而只是停止在文件上循环(并且能够决定我们是否在之后找到了某些内容)

    现在
    // your code
    Random ran = new Random();
    int x = ran.nextInt(100);
    boolean hasNumber = false;