Как вывести логи и состояние массива на момент итерации цикла?

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));
        }
→ Ссылка