使值从一种方法到重载方法都保持恒定

时间:2018-10-15 15:52:16

标签: java overloading

我目前正在介绍Java课程,但是我在这里很困惑。

我创建了一个rollDice()方法,该方法使用Math.random来生成2个int类型的值,它们存储在变量d1d2中。如果值的总和等于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保持恒定,但这不起作用。

1 个答案:

答案 0 :(得分:0)

问题实际上与范围有关。在方法play(int d1, int d2)中,当您在行d1中引用d2sum = d1 + d2;时,实际上是在引用函数的参数,而不是实例变量,因为参数具有更多的“本地范围”。因此,您实际上不会使用两个新的值更新总和。您可以通过更改参数名称(使其与实例变量不同)或通过将实例变量称为this.d1this.d2来解决此问题。