JAVA: печатник печатает странные символы? - PullRequest
0 голосов
/ 09 февраля 2020

Я работаю над проектом, который читает данные из файла, помещает данные в связанный узел, сортирует связанный узел с помощью пузырьковой сортировки и печатает в выходной файл. Каждый раз, когда своп / обмен / проход производится в пузырьковой сортировке, я должен считать его и распечатывать, сколько свопов / обменов / проходов потребовалось для сортировки любого заданного списка. Мой код, кажется, работает нормально, и он будет нормально печататься на моем экране, но в моем выходном файле вместо цифр я получаю странные символы, такие как «Ⴖ» ?? Заранее спасибо !!

package assignment1;

import java.io.PrintWriter;

public class Sorting {

    private int comparisons;
    private int exchanges;
    private int totalC;
    private int totalE;
    private int totalP;
    private long time;
    private int pass;
    private static PrintWriter printWriter;
    private static int n; //size list 

    public Sorting(int size, PrintWriter pw) {
        n = size;
        printWriter = pw;
    }

}

Метод, который сортирует мой список. (он успешно сортировался - никаких проблем нет. Однако обновление моей переменной или мои вызовы моего метода отображения должны быть неудачными. Предполагается, что после каждого «прохода» метода он печатает и сколько сравнений и обменов он сделал каждый пройти. Затем я должен напечатать общее количество всего в конце. Это часть, которая не работает. Когда я попытался напечатать переменные для каждой итерации, я получил очень длинную строку случайных символов и букв.

public void bubbleSort(LinkedNode head) {

    LinkedNode previous; 
    LinkedNode current; 
    LinkedNode next; 
    comparisons = 0;
    exchanges = 0;
    time = 0;
    pass = 0;
    totalC = 0;
    totalE = 0;
    totalP = 0;

    boolean isSorted = true;

    //if list is empty or only 1 item is in list -> it is sorted
    if (head == null || head.getNext() == null) {
        return;
    }

    long start = System.currentTimeMillis(); //begin count for bubbleSort

    while(isSorted) {
        comparisons = 0;
        exchanges = 0;
        previous = null;
        current = head;
        next = head.getNext();
        isSorted = false;

        while(next != null) {
            comparisons ++; //increment counter for each comparison made

            if (current.getElement() > next.getElement()) {
                if (head == current) {
                    head = next;
                }
                else {
                    previous.setNext(next);
                }
                current.setNext(next.getNext());
                next.setNext(current);
                isSorted = true;
                current = next;
                exchanges++;    

            }
            previous = current;
            current = previous.getNext();
            next = current.getNext();
        }

        pass++; //increment counter for each run through
        totalP += pass;
        totalE += exchanges;
        totalC += comparisons;
    }

    long elapsedTimeMillis = System.currentTimeMillis()-start;
    time = elapsedTimeMillis;
}

Единственная часть, которая правильно выводит в мой файл, это переменная времени.На моем экране я получаю число проходов, равное 4239, но в моем выходном файле я получаю странный символ.

void bubbleSortDisplay(LinkedList myList, PrintWriter pw) {
    System.out.printf("time   pass    cmp     exch ");
    printWriter.write("time   pass    cmp     exch ");
    printWriter.write("\n----------------------------\n");

    System.out.printf("\n", time);
    printWriter.write(time + "ms     ");
    System.out.print(time + "ms     ");
    printWriter.write(totalP);
    System.out.print(totalP);
}

1 Ответ

0 голосов
/ 09 февраля 2020

Попробуйте заменить в своем коде таким образом:

printWriter.write(""+totalP);

(Concat totalP с пустой строкой)

...