重新分配数组中的值

时间:2011-08-24 22:53:51

标签: java arrays

我试图写一个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循环留空。 我已经尝试将其设置为多维数组,每个卷都有一个单独的数组。 我已经尝试过添加一个演员(并不认为这样做但我没有想法)。 所有这些都有相同的结果。 只有几个星期的编程,如果有人能告诉我我做错了什么,我会非常感激。

4 个答案:

答案 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);

}