gpt4 book ai didi

java - 随机掷骰和一些数学结果不一致

转载 作者:行者123 更新时间:2023-12-01 19:33:49 25 4
gpt4 key购买 nike

我正在编写一个程序来掷 4 个 6 面骰子,并用它们做一些简单的数学和逻辑。我正在运行一个非常粗略的程序草案,并开始注意到卷数会不一致。特别是我有时不会得到最小值或得到两个

网上寻找解决方案无果。我什至复制了其他示例中有关如何找到最小值的代码

public class test {
private static int dice(int s) {
int num = 0;
Random random = new Random();
num = random.nextInt(s);
num = num + 1;
return num;
}

public static void main(String[] args) {
List<Integer> rolls = new ArrayList<Integer>();
for (int i = 0; i != 4; i++) {
rolls.add(dice(6));
}
for (Integer roll : rolls) {
System.out.println(roll);
}
int min = rolls.get(0);
int index = 0;
for (int x = 0; x < rolls.size(); x++) {
if (rolls.get(x) < min) {
min = rolls.get(x);
index = x;
System.out.println("Smallest: " + min);
}
}

int sum = 0;
for (int x : rolls) {
sum += x;
}
System.out.println("Sum:" + sum);
}
}

这应该生成 4 卷 6 面骰子。然后它应该找到最小的值打印出来,然后计算总和并打印它

最佳答案

查看这段代码:

int min = rolls.get(0);
int index = 0;
for(int x = 0; x<rolls.size(); x++){
if(rolls.get(x) < min){
min=rolls.get(x);
index = x;
System.out.println("Smallest: " + min);
}
}

如果 rolls.get(0); 会发生什么你的最小卷数是多少?在这种情况下,if(rolls.get(x) < min)永远是假的,你永远不会打印“Smallest...”。

另请注意,每次您发现一个骰子比您上次看到的更小时,您都会再次打印出“最小...”,因此如果您有多个尺寸递减的骰子,您将打印该行多次退出。

设置您的首字母min值设置为 7,因此保证最小值小于初始状态。然后,不要在循环内打印,而是保存最小值并在循环完成后打印“Smallest...”:

// Be aware that this code doesn't work correctly if your List is empty.
int min = 7; // You could also set this to rolls.get(0) and start your loop at 1
for (int x = 0; x < rolls.size(); x++) {
if (rolls.get(x) < min) {
min = rolls.get(x);
}
}
System.out.println("Smallest: " + min);

(我还删除了 index ,因为它没有在代码中的任何地方使用)。

<小时/>

如果你想变得更现代一点(也更强大),你也可以这样做:

rolls.stream()
.min(Integer::compareTo)
.ifPresent(min -> System.out.println("Smallest: " + min));

这将处理 rolls 的情况不打印任何东西就变成空的。

关于java - 随机掷骰和一些数学结果不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58548601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com