gpt4 book ai didi

java - 为什么重复使用扫描仪直到用户输入合法值后会出现 "variable might not have been initialized "错误?

转载 作者:行者123 更新时间:2023-12-01 06:02:56 24 4
gpt4 key购买 nike

我正在学习 Java,我遇到了一种我不理解的行为。我在这里找到的所有类似主题都提供了使用默认值进行初始化的演练(我很乐意使用),但没有人解释为什么以下方法会产生错误。

为了更好地理解 Java,我编写了下面的代码只是为了隔离有问题的部分,因此请重点关注我所询问的错误 - 我知道这段代码没有多大意义。

public class Test {

public static void main(String[] args) {
int value;
ValueContainer valueContainer;
boolean isInputLegal = false;

while (!isInputLegal) {
Scanner scanner = new Scanner(System.in);
try {
System.out.print("Set value ");
value = scanner.nextInt();
isInputLegal = true;
} catch (NumberFormatException | InputMismatchException e) {
scanner.nextLine();
isInputLegal = false;
}

if (isInputLegal) {
valueContainer = new ValueContainer(value);
}
}
valueContainer.printValue();
}
}

class ValueContainer {

int value;

public ValueContainer(int value) {
this.value = value;
}

public void printValue() {
System.out.println(value);
}
}

错误出现在 valueContainer = new ValueContainer(value); 行中并排队valueContainer.printValue();

我尝试过的事情:

  1. 我想也许我缺少某种异常,所以我替换了 catch (NumberFormatException | InputMismatchException e)catch (Exception e) 。没有帮助。

  2. 我想编译器可能认为循环可以无限进行,但仍然不提供初始化,因此我向循环添加了一个计数器,它在 1000 次迭代后停止循环并插入一些默认值。没有帮助。

据我所知,当程序员犯了错误并留下了导致使用初始化值的路径时,通常会出现此错误,但我 90% 确信这里的情况并非如此。

最佳答案

尝试初始化您的值,因此不要编写:int value; 而是编写:int value = 0,还尝试使用默认构造函数初始化 ValueContainer,并使用 setter 设置它的值

public static void main(String[] args) {
int value = 0;
ValueContainer valueContainer = new ValueContainer();
boolean isInputLegal = false;

while (!isInputLegal) {
Scanner scanner = new Scanner(System.in);
try {
System.out.print("Set value ");
value = scanner.nextInt();
isInputLegal = true;
} catch (NumberFormatException | InputMismatchException e) {
scanner.nextLine();
isInputLegal = false;
}

if (isInputLegal) {
valueContainer.setValue(value);
}
}
valueContainer.printValue();
}

这应该可以工作(在 ValueContainer 类中添加 setter 方法)

关于java - 为什么重复使用扫描仪直到用户输入合法值后会出现 "variable might not have been initialized "错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53139547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com