我目前正在研究一个程序,在该程序中掷骰子,然后根据结果可以选择一些分数(x3,x4等),并且需要某种方法来检查每个值掷出了多少骰子(有总共5个骰子)。因此,基本上,我需要为每个值使用1:0倍,2:2倍,3:1倍等等。问题是我不想为每个值编写20行代码,所以我尝试使用数组,但是结果似乎是随机的。下面是我的代码
int[] a = new int[6];
for(int i = 0; i<dice.size();i++){
if(dice.get(i).getValue() == 1){
a[0]++;
}
if(dice.get(i).getValue() == 2){
a[1]++;
}
if(dice.get(i).getValue() == 3){
a[2]++;
}
if(dice.get(i).getValue() == 4){
a[3]++;
}
if(dice.get(i).getValue() == 5){
a[4]++;
}
if(dice.get(i).getValue() == 6){
a[5]++;
}
}
for(int i : a ){
System.out.println(a[i]);
}
在此处设置骰子值:
for (int i = 0; i < 5; i++) {
random = (int) (Math.random() * 6) + 1;
dice.get(i).setValue(random);
例如,当我滚动并获得骰子:1、3、4、4、6时,程序将打印: 0 1个 0 1个 1个 0 好像有一个2,一个4和一个5。
答案 0 :(得分:0)
可以通过简单地从值中减去1来获得要递增的数组元素的索引来缩短第一个循环(假设列表元素的类型为Die
)
for (Die d : dice) {
a[d.getValue()-1]++;
}
第二个循环是错误的,因为您使用数组元素的值从数组中检索元素。等效的非增强的for循环如下:
for (int index = 0; index < a.length; index++) {
System.out.println(a[a[index]]);
}
第二个数组访问导致的结果与预期的结果不同。您需要重写循环以获得预期的结果:
for(int count : a) {
System.out.println(count);
}