Обратный связанный список и запись в файл: 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 не станет нулевым. Затем выскочите из стека, добавив каждый элемент обратно в свой связанный список, пока стек не станет пустым.