gpt4 book ai didi

java - 用 n 个元素填充 ArrayList 至特定总和

转载 作者:行者123 更新时间:2023-12-01 21:22:48 25 4
gpt4 key购买 nike

目前,我正在完成书中的一些练习,解决保加利亚纸牌问题(本章介绍数组和数组列表)。

基本思想是从一列数字(随机大小)开始,只要它们的总和为 45,比如20、5、1、9 和 10,您给出一个并创建另一个堆栈就像下面这样

20, 5, 1, 9, and 10 -> 19, 4, 8, 10, and 5.

最终,如果你继续这样做,你会得到一个像这样的堆栈

1, 2, 3, 4, 5, 6, 7, 8, and 9

我在问题的第一次开始时遇到了麻烦,我用特定数量的项目填充数组列表,只要它们的总和为 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 > 45)

目前,我的程序有时会结束并给我一个大小合适的数组列表。但很多时候永远不会终止。

最佳答案

查看您的代码:

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;
}
}

在这里,您将从 45 中减去 nextNum 以获得达到的最大数量。但是,您想要做的是减去 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;
}
}

关于java - 用 n 个元素填充 ArrayList 至特定总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38884749/

25 4 0