2016-12-05 4 views
-1

В моем коде у меня есть переменная randomNumber, которая должна измениться, но это никогда не произойдет. Зачем?Почему моя переменная никогда не меняется?

import java.util.Random; 
import java.util.Scanner; 

public class NimGame 
{ 

    public static void main(String[] args) 
    { 
     Random myRandom = new Random(); 

     int playerCount = 1; 
     int stonesRemoved = 0; 
     int randomNumber; 

     randomNumber = myRandom.nextInt(15) + 16; // Selects a random number between 15-30 as the number of stones. 

     System.out.println("You will be playing with: " + randomNumber + " stones."); 

     System.out.println("Each player can take 1, 2 or 3 stones when it is your turn."); 
     System.out.println("Player who takes the last stone looses."); 
     System.out.println(); 

     Scanner input = new Scanner(System.in); 

     while (true) 
     { 
      StoneRemover (randomNumber, playerCount); 
      randomNumber = randomNumber - stonesRemoved; 

      System.out.println("There are now: " + randomNumber + " stones"); 

      if (randomNumber == 0) 
      { 
      if (playerCount == 1) 
      { 
       System.out.println("Player 1 lost!"); 
      } 

      else 
      { 
       System.out.println("Player 2 lost!"); 
      } 
      break; 
      } 
      playerCount ++; 

      if (playerCount > 2) 
      { 
      playerCount = 1; 
      } 
     } 
     input.close(); 
    } 

    public static int StoneRemover (int stonesRemoved, int playerCount) 
    { 
     Scanner input = new Scanner(System.in); 
     while (true) 
     {  
      System.out.print("How many stones does player " + playerCount + " want to take? "); 
      stonesRemoved = input.nextInt(); 
     if (stonesRemoved > 3 || stonesRemoved == 0) 
      { 
      System.out.println("You did not select a correct number of stones to remove."); 
      System.out.println("Try Again!!"); 
      } 

     else 
      { 
      break; 
      } 
     } 
     return stonesRemoved; 
    } 
} 

     //Every time I run the code, the randomNumber does not update to the new number after the user retrieves 1,2, or 3 stones. Why is this happening 
+0

Реальный вопрос вообще не связан с случайными числами. Вы используете генератор случайных чисел только один раз и никогда больше. Реальный вопрос: «Почему моя переменная никогда не меняется». –

ответ

0

Вы не можете использовать возвращаемое значение из stonesRemoved функции:

stonesRemoved = StoneRemover(randomNumber, playerCount); 

Или вы могли бы сделать:

randomNumber -= StoneRemover(randomNumber, playerCount); 
0

Программа не работает, потому что вы не изменить переменная stonesRemoved. Он остается 0, всегда!

«Но нет! Я изменил его в методе StoneRemover! Разве я не был?» вы можете спросить.

Ну что вы сделали здесь:

stonesRemoved = input.nextInt(); 

является не изменения stoneRemoved переменной, которая используется в основном метод, а именно:

randomNumber = randomNumber - stonesRemoved; // <-- not this one! 

Это потому, что вы прошли значение вместо ссылки на метод stonesRemoved, поэтому его изменение внутри метода StoneRemover не влияет на stonesRemoved var в основном методе. Что вы можете сделать это:

Изменить эту строку:

StoneRemover (randomNumber, playerCount); 

к этому:

stonesRemoved = StoneRemover (randomNumber, playerCount); 

И он должен работать!

Смежные вопросы