我想在1-8范围内的两个字段中生成随机数,字段和也应小于9 我到目前为止所做的事情
for (int i; i <= 6; i++) {
fieldOne = rand.nextInt(9 - 5) + 5;
fieldTwo = rand.nextInt(9 - 5) + 5;
fieldSum = fieldOne + fieldTwo;
System.out.print(fieldSum); // should be < 9 and not repetition
}
但fieldSum
变得大于9,所以如何控制这种情况?
并且序列应该是随机的,不应重复2次或更多次。
答案 0 :(得分:0)
也许试试这个 - &gt; random.nextInt()%9;另一种方法使用random.nextInt(9)获取随机数。
答案 1 :(得分:0)
尝试,
fieldSum =(fieldOne + fieldTwo)%9;
这将是def
答案 2 :(得分:0)
rand.nextInt(9-5)
不会计算5到8之间的随机数,它会使操作9减去5,然后计算rand.nextInt(4)
。
要计算5到8之间的随机数,您必须执行以下操作:
Random r = new Random();
for (int i = 0; i < 10; i++) {
int rand1 = r.nextInt(4) + 5;
int rand2 = r.nextInt(4) + 5;
int result = rand1 + rand2;
Log.v("", "" + result);
}
问题是结果不能&lt;超过9,因为你要求两个数字=&gt; 5所以你得到的结果就是10。
编辑一个没有重复的解决方案:
private List<Integer> rdmNumList = new ArrayList<Integer>();
private final int leftLimitRange = 1;
private final int rightLimitRange = 10;
private final int numOfIteration = 10;
public void generateNumList() {
for (int i = leftLimitRange; i <= rightLimitRange; i++) {
this.rdmNumList.add(num);
}
}
public int getRandomNumer() {
Random r = new Random();
int rNum = r.nextInt(rdmNumList.size());
int result = this.rdmNumList.get(rNum);
this.rdmNumList.remove(rNum);
return result;
}
public void test() {
this.generateNumList();
if(this.numOfIteration <= ((this.rightLimitRange - this.leftLimitRange + 1))) {
for (int i = 0; i < this.numOfIteration; i++) {
Log.v("Debug Output", String.valueOf(this.getRandomNumer()));
}
}
}
注意:这仅适用于小范围的数字
这段代码有效,但远没有好。您应该自己找一些其他解决方案。 This answer会帮助您找到自己的方式