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
是随机生成的,那么sumx1+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;
}