Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 随机数和while循环问题_Java_Random_While Loop - Fatal编程技术网

Java 随机数和while循环问题

Java 随机数和while循环问题,java,random,while-loop,Java,Random,While Loop,我必须为ArrayList中的52000个实例生成两个随机数,攻击1和攻击2,其中攻击1必须大于攻击2,因此我必须将它们放入列表中。这是我的示例代码: do { atk_p1 = (int) (Math.random() * (5000-500+1)+500); atk_p2 = (int) (Math.random() * (5000-500+1)+500); } while(atk_p1 <= atk_p2); data.add(String.valueOf(atk_

我必须为ArrayList中的52000个实例生成两个随机数,攻击1和攻击2,其中攻击1必须大于攻击2,因此我必须将它们放入列表中。这是我的示例代码:

do {
    atk_p1 = (int) (Math.random() * (5000-500+1)+500);
    atk_p2 = (int) (Math.random() * (5000-500+1)+500);
} while(atk_p1 <= atk_p2);

data.add(String.valueOf(atk_p1));
data.add(String.valueOf(atk_p2));
do{
atk_p1=(int)(Math.random()*(5000-500+1)+500);
atk_p2=(int)(Math.random()*(5000-500+1)+500);

}而(atk_p1如果要生成两个随机数,
a
b
,例如
a
,则

  • 生成
    a
  • b
    生成为
    a
    加上一个大于零的随机数

  • 编辑:这是错误的,我承认。请看下面的评论。这是罪过。

    我只会生成第二个随机数,第一个是上限:

    atk_p1 = (int) (Math.random() * (5000-500+1)+501);
    atk_p2 = (int) (Math.random() * (atk_p1)+500);
    
    data.add(String.valueOf(atk_p1));
    data.add(String.valueOf(atk_p2));
    

    另一种方法是生成
    a
    b
    ,然后进行简单的比较检查,查看
    b
    是否小于
    a

    如果不是,您只需交换
    a
    b

    我就这样解决了:

       int atk_p1 = 0;
       int atk_p2 = 0;
    
       data.add(String.valueOf(atk_p1));
       data.add(String.valueOf(atk_p2));
    
       do{
        atk_p1 = (int) (Math.random() * (5000-500+1)+500);
        atk_p2 = (int) (Math.random() * (5000-500+1)+500);
       }while(atk_p1 == atk_p2);
    
    
      if(atk_p1 > atk_p2){
        data.set(34, String.valueOf(atk_p1));
        data.set(36, String.valueOf(atk_p2));
      }else{
        data.set(34, String.valueOf(atk_p2));
        data.set(36, String.valueOf(atk_p1));
      }
    

    问题出在arraylist.add()上操作时,它对指令的顺序并不严格。使用索引指定信息的放置位置非常有效。

    这是什么编程语言?请使用该信息更新问题并添加适当的标记。为什么不生成第二个数字,并将第一个数字作为上限,从而消除需要对于do…while循环?在文本中你一直说“大于”,但在代码中你写“大于或等于”。你指的是哪一个。如果这打破了有效b的上限呢?@BillWoodger你知道
    a
    ,你知道你的上限
    m
    ,然后
    b=a+1(r%(m-a-1))
    ,其中
    r
    是一个随机数。
    +1
    -1
    是严格不等式所必需的。我仍然不知道这是什么语言,所以我不知道那是什么
    random()
    thingy返回。假设生成的随机数的上限有一些限制,那么a+某个新的随机数可以打破这一限制。我不知道你的代数是否证明了这一点,但事实确实如此。请参阅SilverWarrior的答案。目前,OP并没有限制生成数的上限正如我所看到的。另外,我仍然不知道
    random()
    是返回一个整数值(我已经假设)还是一个浮点值(在这种情况下,数学是不同的),因为我不知道这种语言。所以你希望有某种语言,它有一个随机函数(可能是特定的)哪一个没有限制,这就是提问者使用的?中等随机数+高随机数=所有情况下(所有语言)的破坏随机数它没有为某些深奥的目的提供对特定随机数函数的限制。我缺少什么?抱歉,我的手机上没有出现这一点。包括关于何时相等(不必有彩票的内容)的内容,我将删除我的。我看不到更简单的解决方案,而且与语言无关。