Глобализировать входную переменную в Java - PullRequest
0 голосов
/ 08 сентября 2010

Я пытаюсь сделать лотерею на Java, и она использует вызовы методов вместо циклов while для циклических целей. Однако я не могу получить входную переменную (такую ​​как int bet = input.nextInt ()), которая будет распознана как переменная для других методов. Я не знаю, как глобализировать «ставку», чтобы она могла использоваться всеми методами, а не только в методе, частью которого она является. Вот часть моего кода ниже, включая только один метод, называемый "play ()"

public static void play()
{
    System.out.println("\nPlay? Yes = 1 No = 2 ");
    Scanner input = new Scanner(System.in);
    int play = input.nextInt();
    if(play == 1)
    {

        System.out.print("Current balance is " + account);
        System.out.print("\nPlace your bet: ");
        int bet = input.nextInt();

        if((bet <= account) && (bet > 0)){
            lottery();
        }
        else if((bet < 0) || (bet > account)){
            play();
        }
    }
    else if(play == 2){
        System.out.println("Final balance is " + account);
        System.exit(0);
    }
    else{
        System.out.println("Invalid input!");
        play();
    }

}

Ответы [ 4 ]

2 голосов
/ 08 сентября 2010

Самый простой ответ - объявить игру и ставку статическими переменными класса.

public class Game {
   private static int play = 0;
   private static int bet = 0;

   public static void play() {
      System.out.println("\nPlay? Yes = 1 No = 2 ");
       Scanner input = new Scanner(System.in);
       play = input.nextInt();
       if(play == 1) {

        System.out.print("Current balance is " + account);
        System.out.print("\nPlace your bet: ");
        bet = input.nextInt();

        if((bet <= account) && (bet > 0)) {
            lottery();
        }
        else if((bet < 0) || (bet > account)){
            play();
        }
    }
    else if(play == 2){
        System.out.println("Final balance is " + account);
        System.exit(0);
    }
    else{
        System.out.println("Invalid input!");
        play();
    }
}
1 голос
/ 08 сентября 2010

Если вы определяете ставку как поле в классе, например:

public class Lottery {
    private int bet;

    public void lottery() {
        ...
    }

    public void play() {
        ...
    }

    public static void main(String[] args) {
        Lottery lottery = new Lottery();
        lottery.play();
    }
}

тогда ставка доступна во всех методах в классе, но не снаружи.

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

Большинство людей в этом случае не ставят поле, а передают его в качестве параметра в метод лотереи. В этом случае видимость может быть дополнительно ограничена только методами игры и лотереи.

И последнее замечание: вы используете вызовы функций для цикла. Поскольку java не поддерживает оптимизацию tail-call (и она не будет применяться здесь в любом случае), вы собираетесь заполнить стек и, наконец, умрете от переполнения стека, если играете достаточно долго.

1 голос
/ 08 сентября 2010

Определить bet вне метода play().

0 голосов
/ 08 сентября 2010

Передайте его между методами как параметр. (Определение его как public не рекомендуется.) Или, если это класс, вы можете сделать его переменной-членом (свойство).

...