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

Я пишу программу «Nim» для одного из моих классов, в котором генерируется случайное количество камней, затем игрок и компьютер по очереди убирают 1-3 камня из колоды.Игрок, удаляющий последний камень, проигрывает.

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

(Это также может помочь узнать, что это два отдельных файла. )

//code code code...

System.out.println("You take " + playertake + " stones. There are " + rockCount + " left");

int computerTake = 0;

nimMethods.computerTake(computerTake);

rockCount = rockCount - computerTake;

System.out.println("The computer takes " + computerTake + " stones. There are " + rockCount + " left");

Вот мой файл методов:

public class nimMethods
{
   static int computerTake(int y)
   {
      y =  (int)(Math.random()*((1 - 1) + 3 + 1)); //randomly generating a value between 1-3
      return(y);
   }
}

Я твердо убежден, что это логическая ошибка, и это происходит из-за моего недостатка знаний о методах.Но люди, кажется, не задают этот вопрос, где я смотрю.

Может ли кто-нибудь помочь мне?А также объясните свой ответ, я хотел бы узнать.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Это потому, что Java имеет значение Передача по значению : значения параметров метода копируются в другую переменную, а затем копируется объект, поэтому он называется передачей по значению.

Итаквы не можете увидеть «измененное» значение y , чтобы отменить ваш метод computerTake, так как значение y было скопировано.

Чтобы исправить это, вы можете просто заменить значение computerTake на результат вашего метода, который вывернулись

computerTake = nimMethods.computerTake(computerTake);
0 голосов
/ 25 февраля 2019

Вы должны сделать:

computerTake = nimMethods.computerTake(computerTake);

Значение computerTake не изменяется в вашем коде, поэтому оно остается 0 в качестве инициализированного.

Не уверен, почему ваш метод computerTake() принимает параметр.

Это делает код следующим образом:

System.out.println("You take " + playertake + " stones. There are " + rockCount + " left");

int computerTake = 0;

computerTake = nimMethods.computerTake();

rockCount = rockCount - computerTake;

System.out.println("The computer takes " + computerTake + " stones. There are " + rockCount + " left");

и

public class nimMethods
{
   static int computerTake()
   {
      int y =  (int)(Math.random()*((1 - 1) + 3 + 1)); //randomly generating a value between 1-3
      return(y);
   }
}
...