我试图写一个Yahtzee游戏作为在线课程的一部分(实际上并没有注册,只是在家里玩)我已经打了一个墙,操纵数组中的值来跟踪骰子值。这段代码似乎造成了麻烦;
for (int i=0; i<N_DICE; i++){ //goes through each die.
if (display.isDieSelected(i) == false){ //checks if player wants to reroll the die.
dice [i] = dice[i];//problem line-should reassign the same value back to the die.
}
else {
dice [i] = rgen.nextInt(1, 6);
}
}
分配一个新的随机数是有效的,如果我每回合掷5个骰子都很开心。
为了测试的目的,我已经将违规行更改为骰子[i] = 1,虽然它从游戏中获得了一些乐趣,程序仍然有效,所以我认为它的一些简单我做错了线。
我尝试将dice [i]分配给临时变量(在if循环的内部和外部),然后将temp分配给dice [i]。 我试过把if循环留空。 我已经尝试将其设置为多维数组,每个卷都有一个单独的数组。 我已经尝试过添加一个演员(并不认为这样做但我没有想法)。 所有这些都有相同的结果。 只有几个星期的编程,如果有人能告诉我我做错了什么,我会非常感激。
答案 0 :(得分:1)
不确定您要尝试使用该行:
dice[i] = dice[i];
既然它是NOP,为什么不省略呢?
答案 1 :(得分:1)
我真的没有看到目的:
dice[i] = dice[i]
你不能只使用:
for (int i=0; i<N_DICE; i++){
if (display.isDieSelected(i)){
dice [i] = rgen.nextInt(1, 6);
}
}
答案 2 :(得分:0)
代码看起来完全正确,虽然我会更紧凑地写一下:
for (int i = 0; i < N_DICE; i++) {
if (display.isDieSelected(i)) {
dice[i] = rgen.nextInt(1, 6);
}
}
所以你的问题可能就在其他地方。 dice
是一个新数组,还是在程序中始终相同?如果它是某个类中的某个字段,则它应该具有final
修饰符,如下所示:
public class YahtzeeState {
private final int[] dice = new int[N_DICE];
}
此声明确保以后使用完全不同的数组不能替换dice
数组。尽管如此,数组中的值仍然可以改变。
答案 3 :(得分:0)
骰子数组是如何初始化的?我不知道你的整个代码,但我可以想象它不起作用,因为骰子数组只在这个循环中获取它的值?
也许你应该尝试类似的东西:
for (int i=0; i<N_DICE; i++){
if (display.isDieSelected(i) || dice[i] == null)
dice [i] = rgen.nextInt(1, 6);
}