В приведенном ниже коде компилятор Java дает мне ошибку в строке, вызывающей hasAdditionalLiberty
, заявив, что x0
и y0
«возможно, не были инициализированы». Я понимаю намерение сделать это ошибкой, но не в этом случае, x0
и y0
должны быть инициализированы, потому что они всегда проходят цикл for?Ошибка Java неинициализированной переменной
Так что же такое правило, определяющее ошибку неинициализированной переменной?
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;
}
Компилятор не всегда может определить, будет ли гарантирован путь к коду.Он не может отличить 'for (int i = 0; i <4; ++ i) {' и 'for (int i = 0; i> 4; ++ i) {', например. – Blorgbeard
Компилятор не проникает так глубоко в поток программы. –
Правила для определения того, была ли назначена переменная определенно [здесь] (https://docs.oracle.com/javase/specs/jls/se8/html/jls-16.html). – Blorgbeard