【问题标题】:JAVA/ANDROID - How can I generate a NEW random number, without it being identical to the previous random number?JAVA/ANDROID - 如何生成一个新的随机数,而不是与以前的随机数相同?
【发布时间】:2015-03-07 09:47:52
【问题描述】:

我正在使用Random random = new Random(); 生成 2 个随机数来进行随机总和。代码:

    int min = 5, max = 20
    randomNum = random.nextInt((max - min) + 1) + min;
    randomNum1 = random.nextInt((max - min) + 1) + min;

然后我这样显示总和:

    TextView sumText = (TextView) findViewById(R.id.sumText);
    sumText.setText(randomNum + " + " + randomNum1 + " =");

总和下方是EditText,然后当我输入答案时,它会检查答案是否正确,如果答案正确,它会重复上面的所有代码,从而生成一个新的总和。 但是,我仍然有一个问题。有时,当生成总和时,它会生成与旧总和相同的总和。我怎样才能让它生成一个新的总和,而不是与以前的总和相同?我想我应该用while 命令做点什么,但我不确定。

【问题讨论】:

  • 如果你指定一个随机数不能有一些属性,那么它就不再是随机的了。你的问题真的是“我怎样才能生成两个不相同的随机数”?
  • 我正在生成一个有人可以回答的随机和,然后我检查它是否正确。然后我想重新计算一个相同的总和。

标签: java android random numbers


【解决方案1】:
public class Test {

    Random random;
    private int min = 5, max = 20;

    int num1;
    int num2;

    public Test(){
        random = new Random();
        num1 = random.nextInt((max - min) + 1) + min;
        num2 = random.nextInt((max - min) + 1) + min;
    }

    public int getSum(){
        return num1 + num2;
    }

    @Override
    public boolean equals(Test obj) {
        return this.getSum() == obj.getSum();
    }
}

// 主类

Test t1 = new Test();
Test t2 = new Test();

while(t2.equals(t1)){
    t2 = new Test();
}

【讨论】:

    【解决方案2】:

    你可以有一个实用程序类,它可以有一个唯一的数字生成器。像这样,

    import java.util.*;
    import java.lang.*;
    import java.io.*;
    
    class RandomNumberGenerator
    {
        private int min = 5, max = 20;
        private List<Integer> randomList = new ArrayList<Integer>();
    
        private Random random = new Random();
    
        public int getNextRandomNumber() {
    
            int randomNum = random.nextInt((max - min) + 1) + min;
            if(randomList.contains(randomNum)) {
                randomNum = getNextRandomNumber();
            }
            randomList.add(randomNum);
            return randomNum;
        }
    
        public static void main (String[] args) throws java.lang.Exception
        {
            // you can use this piece of code anywhere to generate 
            // random numbers using the utility method of RandomNumberGenerator
    
            RandomNumberGenerator randomNumberGenerator = new RandomNumberGenerator();
            int randomNum = randomNumberGenerator.getNextRandomNumber();
            int randomNum1 = randomNumberGenerator.getNextRandomNumber();
    
            System.out.println(randomNum);
            System.out.println(randomNum1);
    
    
    
        }
    }
    

    【讨论】:

    • 适用于安卓系统...而且我是初学者。
    • 那是我在主函数中写的那条评论。 android中的类和对象就是java中的。你唯一拥有的就是资源,并表现为额外的。在 android 中,您也将创建类,您可以创建这些类的实例并使用它。所以,无论 main 里面写的是什么,你都可以如何使用 RandomNumberGenerator。想用在哪里,就用它。
    【解决方案3】:

    如果你把它改成这样,老实说应该很简单:

    int min = 5, max = 20;
    randomNum = random.nextInt((max - min) + 1) + min;
    do {
        randomNum1 = random.nextInt((max - min) + 1) + min;
    } while(randomNum == randomNum1);
    

    编辑:那么,您只需要存储以前的总和。

    List<Integer> sums = new ArrayList<Integer>();
    randomNum = random.nextInt((max - min) + 1) + min;
    do {
        randomNum1 = random.nextInt((max - min) + 1) + min;
    } while(sums.contains(randomNum+randomNum1));
    sums.add(randomNum + randomNum1);
    

    【讨论】:

    • 对不起,你理解错了我的问题。 randomNumrandomNum1 可以相同。如果有人输入总和的正确答案,它会再次生成randomNumrandomNum1,并且它必须与之前生成的总和不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 2023-01-03
    • 2017-07-30
    • 2014-12-27
    • 2012-01-25
    相关资源
    最近更新 更多