好的,我的目标是能够对每行单个条目的文本文件进行排序。我坚持到我必须创建插入类的地步。我如何传递单个链接列表(我自己的实现,而不是 Java 的)以及我还需要作为参数传递什么?到目前为止,这是我的代码。PS 我使用我自己的链表实现的原因是因为我想知道这件事是如何工作的,以及使用链表完成的各种操作是如何工作的。
任何帮助将不胜感激。
主要的:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class Sort
{
public static void main(String[] args) throws Exception
{
Scanner kb = new Scanner (System.in) ;
File outputFile ;
EntriesList list = new EntriesList () ;
String line ;
String entry ;
String command ;
String textContent ;
// Create the new text file. If exists, it will continue to the next commands
do
{
outputFile = new File("Entries.txt") ;
if(!outputFile.exists())
{
outputFile.createNewFile ();
System.out.println("The file was created as Entries.txt");
System.out.println("");
}
}while (!outputFile.exists()) ;
// Define which file to stream in from
FileInputStream fileIn = new FileInputStream("Entries.txt") ;
DataInputStream input = new DataInputStream (fileIn) ;
BufferedReader br = new BufferedReader (new InputStreamReader (input)) ;
try
{
// Read each line of the file
while ((line = br.readLine()) != null)
{
entry = line;
list.insert(entry) ;
}
input.close() ;
}catch (Exception e){
System.err.println("Error. Could not read the file") ;
}
//Welcome message + entry counter
System.out.println("Welcome. \nYou about to sort " + list.count("Entries.txt") + " entries. \nPlease use the following commands [Add -add new entry, View -view entries before sorting, -i -Insertion Sort, -s -Selection Sort, -m -Merge Sort, Exit]: " );
System. out.println ("") ;
command = kb.next() ;
// User Input
do
{
if (command.equalsIgnoreCase("Add"))
{
System.out.println("Enter String value:") ;
entry = kb.next() ;
textContent = entry ;
System.out.println("Entry added successfully") ;
try
{
//the "true" argument sets the FileWriter to append mode so that is does not overwrite the first time
BufferedWriter out = new BufferedWriter(new FileWriter("Entries.txt", true));
out.write(textContent) ;
out.newLine() ;
out.close() ;
}catch(IOException e)
{
System.out.println("Could not write to file") ;
System.exit(0) ;
}
System.out.println ("Enter command:") ;
command = kb.next() ;
list.insert(entry) ;
}
else if (command.equalsIgnoreCase("View"))
{
if (!list.isEmpty())
{
list.printList();
System.out.println ("Enter command:") ;
command = kb.next() ;
}
else
{
System.out.println("File is empty. Please enter records first.");
System.out.println ("Enter ADD command:") ;
command = kb.next();
}
}
else if (command.equalsIgnoreCase("Exit"))
{
System.exit(0) ;
}
else
{
System.out.println("Unknown command. Please use ADD, VIEW or EXIT") ;
command = kb.next() ;
}
}while (!command.equalsIgnoreCase("Exit")) ;
}
}
列表实现:
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class EntriesList
{
private Entries head;
private int listCount ;
//LinkList constructor
public EntriesList()
{
head = new Entries (null) ;
listCount = 0 ;
}
//Returns true if list is empty
public boolean isEmpty()
{
return head == null;
}
//Inserts a new Entry at the end of the list
public void insert(String entryIn)
{
Entries temp = new Entries (entryIn) ;
Entries current = head ;
// Go to the end of the list
while (current.getNext() != null)
{
current = current.getNext() ;
}
// Last Entries's next reference is set to the noew node
current.setNext(temp) ;
listCount++ ;
}
//Return the size of the list
public int size()
{
return listCount ;
}
//Prints list data
public void printList()
{
Entries currentEntry = head;
while(currentEntry != null)
{
currentEntry.printLink();
currentEntry = currentEntry.nextEntry;
}
System.out.println("");
}
// Count the lines in the text file
public int count(String filename) throws IOException
{
InputStream is = new BufferedInputStream(new FileInputStream(filename));
try
{
byte[] c = new byte[1024] ;
int count = 0 ;
int readChars = 0 ;
while ((readChars = is.read(c)) != -1)
{
for (int i = 0 ; i < readChars ; ++i)
{
if (c[i] == '\n')
++count ;
}
}
return count ;
} finally
{
is.close() ;
}
}
}
条目(链接)创建者:
public class Entries
{
public String entry ;
public Entries nextEntry;
// Empty Link Constructor
public Entries ()
{
}
//Link constructor
public Entries(String entryIn)
{
entry = entryIn ;
nextEntry = null ;
}
public String getEntry ()
{
return entry ;
}
public void setEntry (String entryIn)
{
entry = entryIn ;
}
public Entries getNext ()
{
return nextEntry ;
}
public void setNext (Entries nextEntryIn)
{
nextEntry = nextEntryIn ;
}
//Print Link data
public void printLink()
{
System.out.println("") ;
System.out.print(getEntry() +"\n");
System.out.println("") ;
}
}
还有万能的插入排序类:
public class Insertion
{
public String Sort (EntriesList list)
{
}
}