Java未初始化变量错误

标签 java

在下面的代码中,Java 编译器在调用 hasAdditionalLiberty 的行中给出了一个错误,指出 x0y0 “可能有没有被初始化”。我确实理解使其成为错误的意图,但在这种情况下, x0y0 不是必须初始化吗,因为它们总是经过 for 循环?

那么决定未初始化变量错误的规则到底是什么?

int x0;
int y0;
for (int i = 0; i < 4; ++i) {
    x0 = x + deltaX[i];
    y0 = y + deltaY[i];
    if (isOnBoard(x0, y0) && at(x0, y0) == Color.Empty) {
        break;
    }
}
if (!hasAdditionalLiberty(x, y, x0, y0)) {
    koX = x0;
    koY = y0;
}

最佳答案

嗯,编译器并不知道程序流程中变量值的所有信息。

然后,编译器不知道程序是否会至少进入循环一次,所以在这种情况下x0y0将不会被初始化。

如果您有一个循环,其条件取决于变量:它在运行时间之前知道谁将进入循环?

在这种情况下,您将遇到意外错误

if (!hasAdditionalLiberty(x, y, x0, y0)) {
    koX = x0;
    koY = y0;
}

你只需要初始化然后

int x0 = -1;
int y0 = -1;

int x0 = 0;
int y0 = 0;

例如。

是的,我知道在你的情况下你有一个“静态”循环,因为条件是 < 4 ,如果有人开发了不同的编译器来识别这一点,那么您可能不会遇到该错误。

有关何时收到此类错误的更多信息,请阅读 this .

关于Java未初始化变量错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30113000/

相关文章:

java - 第一次使用 JBoss Netty

java - 用于 netbeans 7 模块开发的代码覆盖率工具

java - OPENGL Android获取我的图像的坐标

Java 日志级别困惑

java - Ant 使用带有命名空间的 antlib

java - Scala 案例类构造函数问题

java - Java 中的信用卡洗涤器/ sanitizer 库

java - 在字符串标记器 JAVA 中作为分隔符的字符集

registry - Java 控制面板中 JRE 自动下载选项的 Windows 注册表是什么?

java - 如何更改、覆盖或切断 Tapestry 默认样式?