Как исправить переменную из класса, не вычитая в методе? - PullRequest
0 голосов
/ 31 марта 2019

Суть этого задания в том, что есть два игрока, которые вынимают палку из колоды. Я сделал класс, в котором есть количество доступных палочек. Существует метод, который вызывается для удаления палочек. Однако, когда я пытаюсь удалить палочки, количество палочек не меняется. Поэтому игра не в состоянии закончиться, потому что все еще есть палочки, «оставленные».

Я пытался использовать инт палки для вычитания. Общее количество палочек изменяется, но только в том методе, в котором они вычитаются. Количество палочек не меняется в основном методе.

Я решил использовать классы, как я видел на этом сайте, именно так можно решить эту проблему. У меня не было успеха с этим.

Итак, я создал класс с количеством палочек, поэтому теперь количество палочек одинаково для каждого метода. Та же проблема сохраняется. Тот, который изменяет количество палочек в методе getSticksRemove (), но не main () или getSticksLeft ().

    //Main Class
    public class Main {
    //Method to remove sticks which considers different scenarios.
        public static int getSticksRemove(int sticks) {
            sticks = StickPile.getValue(StickPile.value);
            Scanner input = new Scanner(System.in);
            print ("How many sticks to remove?(1-3)");
            int x = input.nextInt();

            if( x>=1 && x<=3) {
                sticks -= x;
            }else if(sticks < 3 && x ==2 ) {
                print("Not enough sticks left.");
                getSticksRemove(sticks);

            }else if (x>3) {
                sticks -=3;
            }else {    `enter code here`
                sticks-=1;
        }
        print(sticks);
        return sticks;
    }
//Main method


    public static void main(String [] args) {
        StickPile stickPile = new StickPile();

        int turnP1 = 0;
        int turnP2 = 0;
        int sticks = 0;

    print("How many sticks are there initially? (1-100)");
        StickPile.setValue();
        sticks = StickPile.getValue(StickPile.value);

//This is the loop that determines when to stop the game

        while(sticks != 0) {
            System.out.print("Player 1: ");
            getSticksRemove(sticks);
            getSticksLeft(sticks);
            turnP1++;

            System.out.print("Player 2: ");
            getSticksRemove(sticks);
            getSticksLeft(sticks);
            turnP2++;
        }
        if(turnP1 % 2 == 0 && turnP2 % 2 == 1) {
            System.out.println("P2 Loses");
        }else {
            System.out.println("P1 Loses");
        }
    }
}

// This StickPile class is the one I made to store the number of sticks.


public class StickPile {
    static Scanner input  = new Scanner(System.in);
    public static int value;

    public static void setValue() {
        value = input.nextInt();
        }

    public static int getValue(int x) {
        x = value;
        System.out.println(x);
        return x;
    }

Я ожидаю ввести количество палочек для удаления из стопки. Ex. Количество ворсов: 20 -> Удалить: 12 -> Количество ворсов: 8.

However, I get Ex. PileAmoun: 20 --> Remove: 5--> PileAmount: 20,

1 Ответ

0 голосов
/ 31 марта 2019

Вы игнорируете возвращение getSticksRemove. Вы не можете переназначить параметр, чтобы повлиять на число вне функции.

Просто используйте возвращаемое значение:

sticks = getSticksRemove(sticks)

Сделайте это изменение в обоих местах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...