我现在正在开展一个项目,而且我处于一个棘手的状态。 我正在尝试生成八个连续的随机数但是有一个问题。一个和另一个之间的值不得超过五,并且不得重复该数字。 例如:
5 5 3 12 would need to be: 5 (Something else) 3 (Something else)
我一直在使用Random()选项来回运行,但似乎无法使其工作。所以我决定预先确定整数,以便Random必须在它们之间做出选择。
int One = 1, Two = 3, Three = 5, Four = 7, Five = 8;
Random RNumber = new Random();
int RInteger = RNumber.nextInt(One, Two, Three, Four, Five);
是的,你可能知道......它不起作用。现在我只是Java的初学者所以我要求你提供一些建议。或者让我知道或不知道我正确地接近这件事。 提前致谢,祝你有个美好的一天。
如果您有兴趣。错误:
No suitable method found for nextInt(int, int, int, int, int)
method Random.nextInt(int) is not applicable
答案 0 :(得分:5)
我会使用像
这样的循环public static List<Integer> generate(int count, int maxDiff, int min, int max) {
Set<Integer> ret = new LinkedHashSet<Integer>();
Random rand = new Random();
int last = rand.nextInt(max - min + 1) + min;
ret.add(last);
while(ret.size() < count) {
int next = rand.nextInt(max - min + 1) + min;
if (Math.abs(next - last) <= maxDiff) {
ret.add(next); // will ignore duplicates
last = next;
}
}
return new ArrayList<Integer>(ret);
}
答案 1 :(得分:2)
如果要从定义的整数列表中获取随机整数,请将Integers
放在List
内,然后使用Collections.shuffle
方法对其进行随机播放。获取列表的第一项,然后从列表中删除您拍摄的最后一个数字并重复该过程。
使用我所说的并检查数字的示例代码是最大差异是5:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class RandomNumbers {
public static int OFFSET = 5;
public static void main(String[] s){
RandomNumbers rn = new RandomNumbers();
int prev = 20; //Set prev randomly or any way you want to initialize the list
for (int i = 0; i < 10; i++){
prev = rn.getRandomWithinOffset(prev);
System.out.println(prev);
}
}
private int getRandomWithinOffset (int prev){
List<Integer> listNumbers = new ArrayList<Integer>();
for (int i = prev -OFFSET; i < prev + OFFSET; i++){
listNumbers.add(i);
}
listNumbers.remove(new Integer(prev));
Collections.shuffle(listNumbers);
return listNumbers.get(0);
}
}
答案 2 :(得分:1)
自己动手:
public generatePseudoRandom(int currentInt) {
Random random= new Random();
Integer result= null;
while (result == null || result.intValue() < currentInt - 5 || result.intValue() > currentInt + 5 || result.intValue() == currentInt) {
result = random.nextInt(current + 5);
}
return result;
}
它将生成新的数字,直到它在你的五个边界内。
答案 3 :(得分:0)
NextInt会获取您需要的最大数量。例如数字0-20。 nextInt(20)(这只会给出一个0-20的随机数。你不能做一个以上的数字。
要做你需要的,做一个整数数组(5,10,20等)...... 然后执行nextInt(array.size())。这将为您提供随机数的索引。然后从该索引中获取数字。
Arraylist<Integer> randomNumbers = new Arraylist<Integer>();
randomNumbers.add(5);
randomNumbers.add(10);
randomNumbers.add(15);
Random gen = new Random();
int index = gen.nextInt(randomNumbers.size());
int randomInt = randomNumbers.get(index);
答案 4 :(得分:0)
再一次问好。我一直在玩你的回答,发现它们非常有趣和乐于助人。但是,我确实提到我刚刚开始编程,所以我很难理解它们是如何工作的。鉴于此,我决定玩游戏并尝试创建自己的版本。这就是我想出来的。
import java.util.Random;
public class Main
{
public static void main(String[] args)
{
int RInteger, Loop1 = 0, Loop2 = 0, Loop3 = 0;
Random RNumber = new Random();
while (Loop1 == 0) //Generate the first number
{
RInteger = RNumber.nextInt(8);
if (RInteger == 1)
{
Loop1 = 1;
}
if (RInteger == 5)
{
Loop1 = 5;
}
if (RInteger == 7)
{
Loop1 = 7;
}
}
while (Loop2 == 0) //Generates the second number making sure no duplicates are present and the maximum difference of 5
{
RInteger = RNumber.nextInt(8);
if (RInteger == 1 && (RInteger != Loop1) && (RInteger - Loop1) <= 5 && (RInteger - Loop1) >= -5)
{
Loop2 = 1;
}
if (RInteger == 5 && (RInteger != Loop1) && (RInteger - Loop1) <= 5 && (RInteger - Loop1) >= -5)
{
Loop2 = 5;
}
if (RInteger == 7 && (RInteger != Loop1) && (RInteger - Loop1) <= 5 && (RInteger - Loop1) >= -5)
{
Loop2 = 7;
}
}
while (Loop3 == 0) //A repeat of Loop2 with changed Loop1s into Loop2s and Loop2s into Loop3s
{
RInteger = RNumber.nextInt(8);
if (RInteger == 1 && (RInteger != Loop2) && (RInteger - Loop2) <= 5 && (RInteger - Loop2) >= -5)
{
Loop3 = 1;
}
if (RInteger == 5 && (RInteger != Loop2) && (RInteger - Loop2) <= 5 && (RInteger - Loop2) >= -5)
{
Loop3 = 5;
}
if (RInteger == 7 && (RInteger != Loop2) && (RInteger - Loop2) <= 5 && (RInteger - Loop2) >= -5)
{
Loop3 = 7;
}
}
System.out.println(Loop1 + " " + Loop2 + " " + Loop3);
}
}
它功能齐全,但效率很低。如果应添加更多数字,则还应分别实施相应的ifs。每个额外数字的另一个循环。
我希望这有助于某人。再次感谢您的所有回复。
度过美好的一天。
答案 5 :(得分:0)
对我而言,这只是生成-5到5之间的随机数并将其添加到列表中的最后一个数字的问题。只需确保该数字不为0,因此不会重复最后一个数字。
伪代码:
Let n = random number
output n
repeat {
repeat {
Let r = random number between -5 and 5
} until (r != 0)
next_n = n + r
output next_n
n = next_n
} until (enough numbers are output)