java - 我应该如何根据用户输入设置静态最终变量?

标签 java static initialization final

我正在尝试在 AI 中模拟经典的水壶问题。我制作了一个“JugsState”类,用于存储两个水壶的当前状态,即 jug1 中有多少升水,jug2 中有多少升水。此外,我想存储每个水壶可以容纳的最大水量,我将从用户那里获取该值作为输入。由于这个(两个水 jar 的容量)始终保持不变,因此我将它们声明为静态最终变量。但是我无法在构造函数中初始化它们。是否有任何其他替代方案,它保持类 JugsState 中 max_jug 变量的封装?

class JugsState
{
    private static final int max_jug1,max_jug2;
    private int jug1,jug2; //stores the current amount of water in the jugs.

    JugsState(int a1,int a2)
    {
        max_jug1 = a1;
        max_jug2 = a2;
    }
}

错误:“无法为最终变量 max_jug1 赋值” 错误:“无法为最终变量 max_jug2 赋值”

最佳答案

您不能更改 final 变量,因为它是 final。但是,您可以在声明时将其设置为您想要的任何值。您可以创建一个静态函数来获取 jar 的最大值。它可能是这样的,如果你想从 System.in 中获取它:

private static int getMax(){
    System.out.println("Enter the maximum for a jar:");
    Scanner in=new Scanner(System.in);
    return in.nextInt();
}

然后使用

private static final int max_jug1=getMax();
private static final int max_jug2=getMax();

代替

private static final int max_jug1, max_jug2;

这将为程序运行的其余时间设置这些变量。

关于java - 我应该如何根据用户输入设置静态最终变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27876862/

相关文章:

c++ - 有没有人考虑过更多 "strict"风格的 C++,其中默认/需要初始化变量?

java - openjpa 标准构建器和或

java - 使用java设置属性文件

c - C 中的静态变量

java - 在 android Activity 中调用静态处理程序上的 post

php - protected $var = null;与 protected $var;

c++ - 所有类型的零值?

java - Android 联系人列表选择器

java - 与具有相同字符或字母的字符串进行比较

java - 从另一种形式java更改值