System.out.println() изменяет значение переменной в однопоточной программе

102
11

Я работаю с хорошим размером, но однопоточным java-приложением. В нем у меня есть функция, которая проходит через матрицу размером около [300] [10]. Я сделал много вещей выше этого фрагмента кода и имеет 3 другие матрицы с аналогичными размерами, такие как локальные переменные. У меня возникли проблемы с тем, что цикл не прошел первое значение (таблица [0] [0]), когда я заметил, что код:

System.out.println("");
for (int i = 0; i < table.length; i++) {
for (int j = 0; j < table[i].length; j++) {
if(i == 0 && j == 0){System.out.println("looped through 0 0");}
// a bunch of other stuff
}
}

распечатывает:

looped through 0 0

но код:

//System.out.println("");
for (int i = 0; i < table.length; i++) {
for (int j = 0; j < table[i].length; j++) {
if(i == 0 && j == 0){System.out.println("looped through 0 0");}
// a bunch of other stuff
}
}

ничего не печатает.

Почему это должно быть? У меня закончилось пространство кучи Java? Я переполнился? Это ошибка компилятора?

спросил(а) 2018-06-20T21:14:00+03:00 1 год, 9 месяцев назад
1
Решение
52

Я обнаружил, что не так. Над циклом у меня был еще один цикл и оставил там выражение printf. Я до сих пор не знаю, почему это происходит, но я смог воспроизвести его в следующем классе.

public class TestJavaPrintfError {

public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.printf(" ");
}
String[][] table = new String[300][6];

for (int i = 0; i < table.length; i++) {
for (int j = 0; j < table[i].length; j++) {
if (i == 0 && j == 0) {
System.out.println("looped through 0 0");
}
}
}
}

}

Я занимаюсь разработкой на затмении неона. Кто-нибудь знает, почему это происходит?

ответил(а) 2018-06-20T23:51:00+03:00 1 год, 9 месяцев назад
36

Это шутка?

Просто прокрутите консоль до самого правого, вы увидите печать.

Вы используете System.out.printf(" "); 100 раз, он выделяет много пробелов и подталкивает ваше прикосновение вправо.

ответил(а) 2018-06-20T23:58:00+03:00 1 год, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема