Обратный связанный список и запись в файл: Java

Я пишу код для чтения текстового файла, преобразования его в LinkedList и записи в другой текстовый файл в обратном порядке.

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

package Collections;
import java.io.*;
import java.util.*;

public class Store implements Serializable {

    private static final long serialVersionUID = 1L;

    @SuppressWarnings("rawtypes")
    public static void main(String[] args) throws IOException {

        BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Enter the File Name:");
        String fname1 = br1.readLine();
        FileInputStream fr1 = null;

        // Reading the file

        try {
            fr1 = new FileInputStream(fname1);
        } catch (FileNotFoundException fe) {
            System.out.println("File Not Found.");
            return;
        }
        BufferedInputStream bin1 = new BufferedInputStream(fr1);
        BufferedReader br = new BufferedReader(new InputStreamReader(bin1));
        LinkedList<String> words = new LinkedList<String>();
        FileOutputStream fout1 = new FileOutputStream("ReverseOrder.txt");
        ObjectOutputStream oos = new ObjectOutputStream(fout1);

        // Converting the file into Linked List

        String theWord;
        while (true) {
            theWord = br.readLine();
            if (theWord != null && theWord.length() > 1)
                words.add(theWord);
            if (theWord == null)
                break;
        }
        String[] data = new String[words.size()];
        for (int i = 0; i < words.size(); i++) {

            data[i] = words.get(i);

        }
        System.out.println("Words:" + words);

        // Reversing the LInkedList... Here I don't know why
        // Collections.reverse(words) isn't working. I coudn't reverse my list

            Collections.reverse(words);

        System.out.println("Words:" + words);

        // Writing into a file....but here it is not printing in reverse order.
        // In fact if I tried to print in Regular order but it's printing with
        // extra characters

        oos.writeObject(words);
        oos.close();
        bin1.close();
    }
}

Выход:

Enter the File Name:replace.txt
Words:[Suresh is a good boy and He completed his graduation from IIT Guwahati in 2013 But he is a great man ]
Words:[Suresh is a good boy and He completed his graduation from IIT Guwahati in 2013 But he is a great man ]

Вывод, напечатанный в файле:

¬í sr java.util.LinkedList) S] J`ˆ "xpw t eSuresh - хороший мальчик, и он завершил свое обучение в ИИТ Гувахати в 2013 году, но он великий человек xq ~

3 ответа

Ты бегаешь Collections.reverse(words); в цикле. Вам нужно только запустить его один раз и пропустить цикл, добавив свои собственные слова снова. Вместо этого:

    for (int i = words.size() - 1; i > 0; i--) {

        words.add(words.get(i));
        Collections.reverse(words);
    }

запустите только это:

Collections.reverse(words);

Это выглядит неправильно:

for (int i = words.size() - 1; i > 0; i--) {
    words.add(words.get(i));
    Collections.reverse(words);
}

Почему вы делаете это в цикле? Если Collections.reverse() переворачивает список, все, что вам нужно сделать, это

Collections.reverse(words);

А тебе надо сделать?

Дайте мне знать, если я что-то упустил здесь

Чтобы перевернуть LinkedList, переберите LinkedList, помещая элементы в стек, пока заголовок LinkedList не станет нулевым. Затем выскочите из стека, добавив каждый элемент обратно в свой связанный список, пока стек не станет пустым.

Другие вопросы по тегам