сохранение значения константы от одного метода к перегруженному методу - PullRequest
0 голосов
/ 15 октября 2018

В настоящее время я знакомлюсь с курсом 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 постоянной, когда она была впервые установлена, но это не сработало.

1 Ответ

0 голосов
/ 15 октября 2018

Проблема на самом деле связана с областью применения.В вашем методе play(int d1, int d2), когда вы ссылаетесь на d1 и d2 в строке sum = d1 + d2;, вы фактически ссылаетесь на параметры функции, а не на переменные экземпляра поскольку параметры имеют более «локальную область видимости».Таким образом, вы никогда не обновляете сумму двумя новыми значениями.Вы можете исправить это, либо изменив имена параметров, чтобы они не совпадали с переменными экземпляра, либо ссылаясь на переменные вашего экземпляра как this.d1 и this.d2.

...