【问题标题】:Globalize an input variable in Java在 Java 中全球化输入变量
【发布时间】:2026-02-09 08:40:01
【问题描述】:

我正在尝试用 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();
    }

}

【问题讨论】:

    标签: java variables methods input globalization


    【解决方案1】:

    最简单的答案是将 play 和 bet 声明为静态类变量。

    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();
        }
    }
    

    【讨论】:

    • 谢谢大家帮助我。这正是我想要的。我早些时候尝试将其全球化,但我没有意识到我需要从“int bet = input.nextInt();”中删除 int
    【解决方案2】:

    play() 方法之外定义bet

    【讨论】:

      【解决方案3】:

      如果您将 bet 定义为类中的一个字段,例如:

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

      那么 bet 在类内所有方法中都可用,但在类外不可用。

      没有必要将 play 公开,因此可以很好地保留在 play 方法的范围内。不给变量比严格需要的可见性更多的可见性被认为是一种很好的做法。

      在这种情况下,大多数人不会将 bet 作为一个字段,而是将其作为参数传递给 lottery 方法。在这种情况下,甚至可以进一步将可见性限制为仅游戏和彩票方法。

      最后一点是你使用函数调用来循环。由于 java 不支持尾调用优化(在任何情况下都不适用),如果你玩的时间足够长,你将填满堆栈并最终死于堆栈溢出。

      【讨论】:

        【解决方案4】:

        将它作为参数在方法之间传递。 (不建议将其定义为 public。)或者,如果这是一个类,您可以将其设为成员变量(属性)。

        【讨论】: