Как вывести логи и состояние массива на момент итерации цикла?
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;
class BubbleSort {
private static File log;
static Logger logger = Logger.getLogger("MyLog");
private static FileWriter fileWriter;
public static void sort(int[] mas) {
int lenght = mas.length;
for (int i = 0; i < lenght - 1; i++) {
boolean sorted = true;
for(int j = 0; j < lenght - i - 1; j++) {
if (mas[j] > mas[j + 1]) {
sorted = false;
int swap = mas[j + 1];
mas[j + 1] = mas[j];
mas[j] = swap;
}
}
try {
fileWriter = new FileWriter("log.txt", true);
logger.log(Level.INFO, "");
fileWriter.write(Arrays.toString(mas));
fileWriter.flush();
} catch (SecurityException | IOException e) {
logger.log(Level.SEVERE, "Произошла ошибка при работе с FileHandler.", e);
}
if(sorted) break;
}
}
}
Все попытки приходят к тому, что состояние массива записывается в одну строку, а логи пишутся следом и столбцом. А нужный результат это лог и состояние массива на одной строчке в момент итерации.
Ответы (1 шт):
Автор решения: ifrit461
→ Ссылка
Получается, что если сортировка не сработала и пошла ещё, то запустится лог и выдаст каждую итерацию с изменением:
boolean arrayChanged;
for (int i = 0; i < lenght - 1; i++) {
boolean sorted = true;
arrayChanged = false;
for(int j = 0; j < lenght - i - 1; j++) {
if (mas[j] > mas[j + 1]) {
sorted = false;
int swap = mas[j + 1];
mas[j + 1] = mas[j];
mas[j] = swap;
arrayChanged = true;
}
}
if (arrayChanged) {
logger.info(Arrays.toString(mas));
}