我目前正在介绍Java课程,但是我在这里很困惑。
我创建了一个rollDice()
方法,该方法使用Math.random
来生成2个int
类型的值,它们存储在变量d1
和d2
中。如果值的总和等于4、6、8、9、10或11,则根据该总和建立valuePoint
,然后调用重载方法play(int d1, int d2)
,在该方法中再次掷骰子直到总和等于7(您输了)或总和等于在第一种方法中建立的原始valuePoint
。
我的问题是我似乎无法保持原始的valuePoint
不变,因为它最初是建立为valuePoint = sum
的。因此,每当我使用第二种方法掷骰子时,valuePoint
都会再次变为相等的总和。我希望我能很好地解释我的问题。
public void play(){
rollDice();
sum = d1 + d2;
if(sum == 2 || sum == 3 || sum == 5) {
status = "You Lose.";
valuePoint = 0;
System.out.println(status);
}
else if(sum == 7 || sum == 11) {
status = "You Win!";
valuePoint = 0;
System.out.println(status);
}
else {
status = "You established the value point ";
valuePoint = sum;
System.out.println(status + valuePoint);
}
if(valuePoint == sum)
play(d1,d2);
} // end of method
public void play(int d1, int d2){
final int vp = valuePoint;
sum = 0;
start = true;
while (true) {
System.out.println("Roll again..");
rollDice();
sum = d1 + d2;
if (sum == vp) {
status = "You Win!";
System.out.println(status);
start = false;
break;
}
else if (sum == 7) {
status = "You Lose.";
System.out.println(status);
start = false;
break;
}
} // end of while
} // end of method
这是我的输出示例。
You rolled 1 + 5 = 6
You established the value point 6
Roll again..
You rolled 2 + 6 = 8
You Win!
请注意,第二卷未达到valuepoint
,但仍然是赢家,因为valuePoint
已更改为新的总和。
问题中也给出了属性和操作,因此我必须遵循此API才能获得满分。我添加到属性中的唯一变量是最后一个int vp
,目的是在首次建立该变量时valuePoint
保持恒定,但这不起作用。
答案 0 :(得分:0)
问题实际上与范围有关。在方法play(int d1, int d2)
中,当您在行d1
中引用d2
和sum = d1 + d2;
时,实际上是在引用函数的参数,而不是实例变量,因为参数具有更多的“本地范围”。因此,您实际上不会使用两个新的值更新总和。您可以通过更改参数名称(使其与实例变量不同)或通过将实例变量称为this.d1
和this.d2
来解决此问题。