【问题标题】:Variable might not be initialed变量可能未初始化
【发布时间】:2016-02-24 19:24:46
【问题描述】:
    while (a != true) {
            try {
                input = user_input.nextInt();

                calculate(input);
                a = true;
            } catch (InputMismatchException ex) {
                user_input.next();
                System.out.println("fdsa");
            } catch (RangeException ex) {
            }

        }

        if (input == 1)

我的问题是我捕获了我需要的异常,如果输入是 4 或字符串,我打印错误消息并且程序再次要求我输入 1 到 4 之间的数字,但是当我开始实现异常,我的 if 上的输入变量说它可能没有被初始化。这是我第一次实现异常,我很难过。

(编辑)我解决了上一个问题,但是当我输入一个介于 1 和 4 之间的 int 时,我遇到了一个新的扫描仪无法解决的问题。我的这段代码在另一个 while 循环中,该循环当前是无限的,因为它不允许我在 input=user_input.nextInt() 上再次输入;命令,它总是以我最初输入的相同值重复。提前致谢,很抱歉没有以结构化的形式提出我的问题。

【问题讨论】:

  • 正如它所建议的,初始化你的变量..
  • 请发布一个可行的示例,然后指出您的预期输出以及您得到的输出是什么
  • 你可以摆脱a。将while (a != true) 更改为while (true) 并将a = true; 替换为break。然后编译器会很聪明地意识到,当你到达if (input == 1) 行时,input 必须已经被赋予了一个值。
  • 我知道这不是一个格式正确的问题,对此我很抱歉,感谢您的回答,您对我的帮助很大。

标签: java variables exception


【解决方案1】:

编译器无法确定循环退出的唯一方法是设置input。最简单的解决方案是给它一个初始值,或者你可以像这样重组你的循环。

int input;
while (true) {
    try {
         input = user_input.nextInt();
         calculate(input);
         break;
    } catch (InputMismatchException | RangeException ex) {
         user_input.next();
    }
}
if (input == 1) // ok now.

【讨论】:

  • 你能检查一下我问题的第二部分吗?我遇到了 Scanner 和命令 nextInt() 的问题
猜你喜欢
  • 2012-03-25
  • 2015-07-04
  • 1970-01-01
  • 2013-11-24
相关资源
最近更新 更多