Я должен напечатать несколько узлов в текстовом файле, но он печатает только одно число - PullRequest
0 голосов
/ 26 февраля 2020

Мой код - это модификация существующего кода, которая создает двусвязный список из серии чисел и успешно печатает их в консоли. Разница в том, что мой код должен брать буквы и цифры из входного файла, одинаково помещать их в связанный список и печатать их в выходном файле, начиная с последнего узла.

public class Node{
    int data;
    Node next;
    Node prev;
};
Node start;

(...)

static void display() throws IOException 
    { 
        Node last = (start).prev;
        Node temp = (start).prev;

        File f = new File("STDOUT.txt");
        FileWriter op = new FileWriter(f);
        BufferedWriter bw = new BufferedWriter(op);

        while (temp.prev != start) { 
            System.out.printf("%d ", temp.data);
            bw.write(temp.data + " ");
            temp = temp.prev; 
        }
        System.out.printf("%d", temp.data);
        bw.write(temp.data + " ");
        System.out.printf("\nData printed successfully");
        bw.close();
        op.close();

        //function prints single number because it doesn't make new nodes

    } 

    /* Driver code*/
    public static void main(String[] args) throws IOException { 
        Node start = null;
        /* Start with the empty list */
        start = null; 
        char task = 0;
        int value;
        int find;

        try {
            File f = new File("STDIN.txt");
            FileReader op = new FileReader(f);
            BufferedReader br = new BufferedReader(op);
            System.out.println("file located and opened\n");

            br.close();
            op.close();
        }
        catch(Exception e){
            System.out.println("file not located\n");
        }

        File f = new File("STDIN.txt");
        FileReader op = new FileReader(f);
        BufferedReader br = new BufferedReader(op);

        while(task != 'd' && task != 'D') {
            task = (char)br.read();
            if(task == 'b' || task == 'B') {
                br.skip(1);
                value = br.read();
                insertBegin(value);
            }
            else if(task == 'e' || task == 'E') {
                br.skip(1);
                value = br.read();
                insertEnd(value);
            }
            else if(task == 'a' || task == 'A') {
                br.skip(1);
                value = br.read();
                br.skip(1);
                find = br.read();
                insertAfter(value, find);
            }
            else {
                display();
                task = 'd';
            }
        }
        br.close();
        op.close();
    }

Но функция печатает только одну цифру в функции: 52, которая даже не является одним из чисел. Только один узел сделан, и это не правильный номер. Как настроить функцию или входной файл так, чтобы он вставлял другие узлы и печатал их так, как я хочу? Входной файл должен выглядеть следующим образом:

e 500
b 4
e 70
e 908
a 650 500

и вывод должен выглядеть следующим образом : 908 70 650 500 4

Обе эти функции - единственные, которые я тщательно отредактировал, но если вам нужно увидеть остальную часть кода, чтобы определить мою проблему, дайте мне знать, чтобы я тоже это показал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...