2011-08-24 60 views
1

我试图编写一个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个骰子每回合它的快乐。

为了测试的目的,我已经将有问题的行更改为dice [i] = 1,虽然它需要一些有趣的游戏,程序运行,所以我在想它的简单我做错了那条线。

我试着将dice [i]分配给一个临时变量(在if循环内部和外部),然后将temp分配给dice [i]。 我试着把if循环留空。 我试着将它设置为一个多维数组,每个卷都有一个单独的数组。 我试着添加一个演员(没想到会这样做,但我没有想法)。 所有这些都有相同的结果。 只有编程了几周,如果有人能告诉我我做错了什么,我会非常感激。

+0

这个网站的岩石,问题在十分钟内排序!罗兰Illig是本周的冠军,一个失踪的“最终”是问题。谢谢大家的意见,并感谢唐编辑我的消息,让人们可以阅读! – linuxlewis

+0

Yahtzee +1,它是一款非常棒的游戏 – ghostJago

+0

请点击答案旁边的勾号,接受您最喜欢的答案 – ghostJago

回答

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阵列后不能用完全不同的阵列取代。数组中的值仍然可以更改。

1

不知道你想什么与线做:

dice[i] = dice[i]; 

因为它是一个NOP,为什么不干脆忽略它?

1

我实在不明白的目的:

dice[i] = dice[i] 

你就不能使用这样的:

for (int i=0; i<N_DICE; i++){     
    if (display.isDieSelected(i)){ 
     dice [i] = rgen.nextInt(1, 6); 
    } 
} 
0

骰子数组是如何初始化的?我不知道你的整个代码,但我可以想象它不工作,因为骰子数组只在这个循环中获取它的值?

也许你应该尝试类似:

for (int i=0; i<N_DICE; i++){     
if (display.isDieSelected(i) || dice[i] == null) 
    dice [i] = rgen.nextInt(1, 6); 

}