我正在开发一个程序来掷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)
始终为false,并且永远不会打印“ 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
为空的情况。