当前位置: 首页 > 面试题库 >

未生成新的随机数

蓝泰平
2023-03-14
问题内容

嗨,当我运行这段代码并返回错误的距离时,不会生成新的随机数。不断产生相同的随机数,从而使我陷入无限循环。有人知道为什么会这样吗?感谢您的光临!

private void setRandomVerticies() 
{
    //generate 200 triangles
    this.randomVerticies = new LinkedList<TGVertex>(); 
    random.setSeed(System.currentTimeMillis());
    short x = 5000, y = 5000;
    int specT = 0;
    int vert = 0;
    int triangleCount = 0;
    int rx = 0, ry = 0;
    int sameAxis = 0;
    TGVertex check = new TGVertex(x,y);
    for (int i = 1; i <= 600; i++)
    {
      for (;;)
      {
        rx = random.nextInt(); 
        ry = random.nextInt();
        System.out.println("generate a new random number please");
        if(i == 1) break;
        if (specT == 1) //approximately 50 triangles will have 2 vertices against the edge
        {
          if       (sameAxis == 0  || sameAxis == 1)  { rx = 0; 
          }else if (sameAxis == 2  || sameAxis == 3)  { ry = 0;
          }else if (sameAxis == 4  || sameAxis == 5)  { rx = tImage.getWidth()-1;
          }else if (sameAxis == 6  || sameAxis == 7)  { ry = tImage.getHeight()-1; }
          check = new TGVertex(rx, ry);
          if (!randomVerticies.contains(check))
          {
            if (vert == 2 && distance(check, randomVerticies.get(i-2)))
            {
              sameAxis++;
              if (sameAxis == 8) sameAxis = 0;
              break; //breaks while loop if new vertex is chosen
            } 
            else if (vert == 1)
            {
              sameAxis++;
              if (sameAxis == 8) sameAxis = 0;
              break; //breaks while loop if new vertex is chosen    
            }
          }
        }
        rx = (short)(rx & 0x1FF);
        ry = (short)(rx & 0x19D);
        check = new TGVertex(rx, ry);
        System.out.println("rx = " + rx + " ry = " + ry);
        System.out.println("check = " + check.getX() + ", " + check.getY());
        System.out.println("randomVert = " + randomVerticies.get(i-2).getX() + ", " + randomVerticies.get(i-2).getY());
        if (!randomVerticies.contains(check) && distance(check, randomVerticies.get(i-2))) break; //breaks while loop if new vertex is chosen
      }

      String sliceX = Integer.toHexString(this.width()-1);
      String sliceY = Integer.toHexString(this.height()-1);
      int sX = (int) Integer.parseInt(sliceX, util.Global.HEX);
      int sY = (int) Integer.parseInt(sliceY, util.Global.HEX);  
      x = (short) (rx & sX); 
      y = (short) (ry & sY);
      //System.out.println("("+x+", "+y+")");
      randomVerticies.add( new TGVertex(x, y) );

      if (i % 3 == 0) triangleCount++;
      if (triangleCount == 2 && vert < 3 )
      { 
        specT = 1;
        vert++;
      } 
      if (vert == 3)
      { 
        specT = 0;
        vert = 0;
        triangleCount = 0;
      }
    }
}

这是输出,如您所见,randomVert从不更改值。

rx = 196 ry = 132
check = 196, 132
randomVert = 225, 392
generate a new random number please
rx = 383 ry = 285
check = 383, 285
randomVert = 225, 392
generate a new random number please
rx = 328 ry = 264
check = 328, 264
randomVert = 225, 392
generate a new random number please
rx = 102 ry = 4
check = 102, 4
randomVert = 225, 392
generate a new random number please
rx = 197 ry = 133
check = 197, 133
randomVert = 225, 392
generate a new random number please
rx = 62 ry = 28
check = 62, 28
randomVert = 225, 392
generate a new random number please
rx = 295 ry = 261
check = 295, 261
randomVert = 225, 392
generate a new random number please
rx = 142 ry = 140
check = 142, 140
randomVert = 225, 392
generate a new random number please
rx = 261 ry = 261
check = 261, 261
randomVert = 225, 392

问题答案:

您正在Random循环中创建背对背的新实例。只需创建一个(在循环之外!),然后在需要新值时询问它随机数。认为它就像在挖一口井-
每次要喝一杯水都不会挖新的井,而是挖一口井,然后根据需要喝多口水。



 类似资料:
  • random 生成随机数包 文档:https://www.npmjs.com/package/random 安装:npm install --save random 封装代码: app / extend / context.js // 导入 jwt const jwt = require('jsonwebtoken') // 导入随机数包 const random = require('rando

  • 问题 你需要生成在一定范围内的随机数。 解决方案 使用 JavaScript 的 Math.random() 来获得浮点数,满足 0<=X<1.0 。使用乘法和 Math.floor 得到在一定范围内的数字。 probability = Math.random() 0.0 <= probability < 1.0 # => true # 注意百分位数不会达到 100。从 0 到 100 的范围实

  • 在 Java 中要生成一个指定范围之内的随机数字有两种方法:一种是调用 Math 类的 random() 方法,一种是使用 Random 类。 Random 类提供了丰富的随机数生成方法,可以产生 boolean、int、long、float、byte 数组以及 double 类型的随机数,这是它与 random() 方法最大的不同之处。random() 方法只能产生 double 类型的 0~1

  • 我的任务: 生成1到20之间的随机数,小数点后1位。 然而,我的问题就像mt_rand一样简单。我希望大多数生成的数字较低,大约0.5-4.5,偶尔的数字在4.5-10之间,很少说每12-20小时一次在10-20之间。 我一直在使用以下内容,但不知道从哪里开始。我是一个很基本的自学程序员。 也许如果我简单地解释一下为什么我想要这个,它可能会有帮助… 我拥有一个在线游戏,想要添加3个“银行”与每个银

  • 我需要在我的脚本中生成大约5000个随机数,但是CPU速度太快了,我看到了随机数的趋势。 例如,在第一次迭代的100次中,我用rand(0100)得到了80个介于70和99之间的值;,这真的很不方便。 有没有办法解决这样的问题,或者说,在2012年,随机性已经无法实现了? 我相信有可能从一个执行随机次数的函数中生成随机数。。。但我想不出一个。