目前我正在完成我书中的一些练习,其中我解决了保加利亚单人纸牌的问题(该章是关于阵列和arraylists)。
基本的想法是从一个数字列表(随机大小)开始,只要它们总和为45,说20, 5, 1, 9, and 10
你给一个并创建另一个堆栈,如下所示
20, 5, 1, 9, and 10 -> 19, 4, 8, 10, and 5.
最后,如果你继续这样做,你会得到像
这样的堆栈1, 2, 3, 4, 5, 6, 7, 8, and 9
我遇到问题的第一次开始时遇到问题,我在arraylist中填充了特定数量的项目,只要它们总和为45.以下是我的代码
class organizeCards
{
private int sum;
private Random randNum;
private boolean flag;
private ArrayList<Integer> nums;
public organizeCards()
{
sum = 0;
randNum = new Random();
flag = true;
nums = new ArrayList<Integer>();
}
public void fillArrList()
{
int nextNum = 0;
while(flag)
{
int thisRandNum = randNum.nextInt(45 - nextNum) + 1;
System.out.println(thisRandNum);
nums.add(thisRandNum);
sum+=thisRandNum;
nextNum = thisRandNum;
if(sum == 45)
{
flag = false;
}
}
}
}
继承我的问题(我知道我的问题,只是不确定如何解决它)
我的代码正在执行以下操作。
首先从1-45
获取一个随机数,比如30
现在为45-30 = 15
,因此下一个随机数可以来自1-15
现在说8
现在我们的兰特号码来自1-7
这个过程会不断重复,但最终还是会赢。如果我继续添加这些我的总和45
?
我的逻辑中缺少什么?
编辑(哎呀我在自己的代码中将sum&gt; 45加入)
目前,我的程序有时结束并给我一个适当大小的arraylist。但往往永远不会终止。
答案 0 :(得分:3)
查看您的代码:
while(flag)
{
int thisRandNum = randNum.nextInt(45 - nextNum) + 1;
System.out.println(thisRandNum);
nums.add(thisRandNum);
sum+=thisRandNum;
nextNum = thisRandNum;
if(sum == 45)
{
flag = false;
}
}
在这里,您要从nextNum
中减去45
以获得达到的最大数量。但是,您希望做的是减去random()
函数生成的所有先前数字的总和。
更改了代码:
while(flag)
{
int thisRandNum = randNum.nextInt(45 - nextNum) + 1;
System.out.println(thisRandNum);
nums.add(thisRandNum);
sum+=thisRandNum;
nextNum = sum;
if(sum == 45)
{
flag = false;
}
}