Java 如何按递增顺序生成随机数

Java 如何按递增顺序生成随机数,java,Java,我想按升序生成随机数,例如:0,2,3,5。。100,但不是2,0,5.. 这就是我到目前为止的想法: public static int vol=5; public static void main(String[] args) { int randno = getRandNum(); vol = vol+randno; System.out.println(getRandNum()); } private static int getRandNu

我想按升序生成随机数,例如:
0,2,3,5。。100,但不是
2,0,5..

这就是我到目前为止的想法:

public static int vol=5;    
public static void main(String[] args) {
    int randno = getRandNum();
    vol = vol+randno;   
    System.out.println(getRandNum());
}   
private static  int getRandNum() {
    Random r = new Random();
    for (int i =0; i<10; i++)
    {
        int v=r.nextInt(vol);
        System.out.println("r"+v);
    }
    return vol;
}
publicstaticintvol=5;
公共静态void main(字符串[]args){
int randno=getRandNum();
vol=vol+randno;
System.out.println(getRandNum());
}   
私有静态int getRandNum(){
随机r=新随机();
对于(int i=0;i

或者,如果你是一个微优化类型的人,不希望排序

/**
 * Generates random numbers, returning an array of ascending order.
 * @param amount    The amount of numbers to generate.
 * @param max       The maximum value to generate.
 * @return  An array of random integers of the specified length.
 */
public static int[] generateIncreasingRandomWithoutSorting(int amount, int max) {
    int[] randomNumbers = new int[amount];
    double delta = max / (float)amount;
    Random random = new Random();
    for (int i = 0; i < randomNumbers.length; i++) {
        randomNumbers[i] = (int)Math.round(i*delta + random.nextDouble() * delta);
    }
    return randomNumbers;
}
每个数字都在0-10、10-20、20-30之间的原因是,在这个用例中,如果我只考虑整个范围,而你在第一次尝试时得到100,那么你将得到100的整个数组

由于更易控制,使用此解决方案,您不会真正得到您想要的(“10个0到100的数字按升序排序”),因为它会修改每个连续数字的范围。(与任何其他不需要排序的解决方案一样)

这是怎么回事

public class increasing {
    public static void main (String[] args) { 
        Random r = new Random(); 

        int totalNums = 100; 
        int count = 0;

        int lastVal = 0;
        int currVal = 0;
        while(count < totalNums) { 
            currVal = r.nextInt(200);
            lastVal = lastVal + currVal; 
            System.out.println(lastVal + ",");
            count++;
        }
    }

}
公共类增加{
公共静态void main(字符串[]args){
随机r=新随机();
int totalNums=100;
整数计数=0;
int-lastVal=0;
int currVal=0;
而(计数<总数){
currVal=r.nextInt(200);
lastVal=lastVal+currVal;
System.out.println(lastVal+“,”);
计数++;
}
}
}

Ben Barkay的答案很好,但如果您不想在一个步骤中创建一组数字,而是想一个接一个地获得一个数字,您可以这样做:

private static final int MAX = 5;

private Random rand = new Random();
private int maxRand = 0;

public int getIncreasingRandomNumber() {
    maxRand = rand.nextInt(MAX);
    return maxRand;
}

创建它们,然后按递增顺序对它们进行排序。您忘了问一个问题。我会给出一个建议,该建议可能更容易与您当前的实现配合使用。现在不必担心顺序。将它们填充到数组或列表中并对其进行排序。这样做会更好、更容易。为什么要调用getRandNum()2次+1,我来这里只是为了写一个类似的解决方案。不需要排序,只需再加一些随机数,然后与最后一个求和。太棒了!不过这不是一个均匀的随机分布。我相信如果两个数
x1
x2
是随机生成的,那么sum
x1+x2
就足够随机了。你认为呢不同意吗?关于均匀随机分布-不要忘记,我们讨论的是一组严格递增的数字,所以我们当然不能有均匀分布。如果我错了,请纠正我。
// Generates 10 random numbers of value 0 to 100,
// printing them in ascending order
for (int number : generateIncreasingRandomWithoutSorting(10, 100)) {
    System.out.print(number + " ");
}
public class increasing {
    public static void main (String[] args) { 
        Random r = new Random(); 

        int totalNums = 100; 
        int count = 0;

        int lastVal = 0;
        int currVal = 0;
        while(count < totalNums) { 
            currVal = r.nextInt(200);
            lastVal = lastVal + currVal; 
            System.out.println(lastVal + ",");
            count++;
        }
    }

}
private static final int MAX = 5;

private Random rand = new Random();
private int maxRand = 0;

public int getIncreasingRandomNumber() {
    maxRand = rand.nextInt(MAX);
    return maxRand;
}