当前位置: 首页 > 知识库问答 >
问题:

每次使用Math.random()以随机顺序生成0、1、2、3(偶数整数),不重复?

於乐
2023-03-14

如何在每次运行程序时以随机顺序生成0,1,2,3(甚至整数),不重复?

如在,运行这个for循环:for(int x=1; x

我被要求使用math.random,但我无法解决这个问题。最接近的是:

for( int x = 1; x < 5; x++ )    
{
    double rand = (Math.random() * 4) + 1 ;
    int rand1 = (int) rand;

    if( rand1 == 0 )
    {
        System.out.println( songs[rand1].title );
    }
    if ( rand1 == 1 )
    {
        System.out.println( songs[rand1].title );
    }
    if( rand1 == 2 )
    {
        System.out.println( songs[rand1].title );
    }
    if( rand1 == 3 )
    {
        System.out.println( songs[rand1].title );
    }
}

这永远不会给我第一个数字,因为它只有1-4,我相信当它超过4时会给我一个错误。

期望的输出是四首歌曲中的每一首每次都以随机顺序打印一次。

共有2个答案

谭煜
2023-03-14

你用这一行随机化它

double rand = (Math.random() * 4) + 1 ;

这意味着“从0-1中创建数字并乘以4),所以它创建0-3.999999999,然后加1,所以值是1-4.99999999。

解决方案:

double rand = (Math.random() * 4)

或者您可以使用Random类,它可以返回范围内int数:

Random r = new Random();
r.nextInt(4);

不重复的完全解决方案(抱歉,之前没有看到)

    Random r = new Random();
    boolean end;
    int randomNumber = -1;
    int numberOfNumbers = 4;

    for (int i = 0; i < 1000; i++) {
        end = false;
        while ( (end == false) && (numberOfNumbers > 1)) {
            int x = r.nextInt(numberOfNumbers);
            if (x != randomNumber) {
                end = true;
                randomNumber = x;
            }
        }
        System.out.println("Randomized this nubmer " + randomNumber);            
    }

当您使用数学随机时

    boolean end;
    int randomNumber = -1;
    int numberOfNumbers = 4;

    for (int i = 0; i < 1000; i++) {
        end = false;
        while ( (end == false) && (numberOfNumbers > 1)) {
            int x = (int) (Math.random()*numberOfNumbers);
            if (x != randomNumber) {
                end = true;
                randomNumber = x;
            }
        }
        System.out.println("Randomized this nubmer " + randomNumber);                        
    }
鞠晋
2023-03-14

首先,通过添加 1,将随机数的范围从 0-3 移动到 1-4。不要添加 1。

但是为了解决你的问题,为了获得不重复的数字,你需要洗牌数字。创建一个包含 {0, 1, 2, 3} 的数组,并多次交换 2 个随机索引的值。

 类似资料:
  • 我想使用Math.Random生成数字1-4(整整数)。我只成功地获得了双倍或大双倍,无法弄清楚如何对最小和最大设置限制。 math.random();=0-1之间的东西作为双倍? 我见过一些人这样建议:num=math.random()*60+25;但不知道它是怎么做的,或者它是如何工作的。

  • 问题内容: 如何使用Math.random生成随机整数? 我的代码是: 它显示的全部是0,我该如何解决? 问题答案: 将abc转换为整数。

  • 本文向大家介绍C++生成不重复的随机整数,包括了C++生成不重复的随机整数的使用技巧和注意事项,需要的朋友参考一下 C++生成不重复的随机数,供大家参考,具体内容如下 给定正整数的范围[n,m],生成k个不重复的随机数字。 IDE是vs013。 运行结果: 这个程序可以用于班级内部按照学号进行随机抽签。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 当您导入java.util.random之后,您可以通过两种方式生成随机整数和随机double。 您可以创建Random类的一个实例

  • 本文向大家介绍JavaScript中用于生成随机数的Math.random()方法,包括了JavaScript中用于生成随机数的Math.random()方法的使用技巧和注意事项,需要的朋友参考一下  此方法返回0(含)和1(不包括)之间的随机数 语法 下面是参数的详细信息:     NA 返回值: 返回0(含)和1(不包括)之间的随机数 例子: 这将产生以下结果:

  • 为什么这个程序的输出是而不是 当你除以3/2,它等于1.5,我认为Java只取整数的第一个值。发生什么事?