我正在研究一個程序,該程序利用RadixSort從文件中讀取文字 並使用教授給我的算法以升序排序(要求對於此RadixSort按預期工作,所有條目必須是單詞,並且所有單詞必須具有相同的長度)。我寫了我的RadixSort類:RadixSort從文件中讀取字符串並從ArrayList中降序排列
編輯:請忽略initializeWords方法中的註釋。他們在那裏進行測試。
public class RadixSort implements RadixSortADT{
private ArrayList<String> lowercaseArray;
private ArrayList<LinkedQueue<String>> arrayQueues;
private String results;
public RadixSort(){
}
public RadixSort(ArrayList<String> w) {
lowercaseArray = new ArrayList<String>();
arrayQueues = new ArrayList<>();
initializeList();
initializeWords(w);
}
public void initializeList() {
for(int i = 0; i < 26; i++){
arrayQueues.add(new LinkedQueue<String>());
}
}
public void initializeWords(ArrayList<String> w) {
// Get size of first word and check length and if it is a character.
// Test all 26 letters of the alphabet.
for(int i = 0; i < w.size(); i++){
lowercaseArray.add(w.get(i).toLowerCase());
}
}
public void sort() {
int item = 0;
for(int i = lowercaseArray.get(0).length()-1; i>=0; i--){
for(int j = 0; j < lowercaseArray.size(); j++){
char character = lowercaseArray.get(j).charAt(i);
arrayQueues.get(character-97).enqueue(lowercaseArray.get(j));
}
item = 0;
for(int k = 0; k < arrayQueues.size(); k++){
while(!arrayQueues.isEmpty()){
lowercaseArray.get(item++).equals(arrayQueues.get(k).dequeue());
}
}
}
}
public String toString(){
for(String words: lowercaseArray){
results += " " + words + " ";
}
return results;
}
}
,併爲進一步參考,肇事司機也被我的教授提供的,看起來是這樣的:
public class RadixSortDriver {
public static void main(String[] args) throws FileNotFoundException{
int i = 0;
ArrayList<String> words = new ArrayList<>();
Scanner scan = new Scanner(System.in);
System.out.println("Enter the name of the file to import words");
String filename = scan.nextLine();
//String filename = "four.txt";
Scanner inFile = new Scanner(new File(filename));
while(inFile.hasNext()) {
words.add(inFile.nextLine());
}
RadixSort r = new RadixSort(words);
System.out.println("Unsorted List:\n" + r);
r.sort();
System.out.println("\n\nSorted List:\n" + r);
}
}
但我發現了兩個錯誤:
- 我的輸出看起來是像這樣:
Uns orted列表: null主隊Xray原子紗山羊穀倉風箏愛雨肥皂
顯然null不是我的一個單詞;但其他人都是正確的。我試着改變我的toString並使用不同的輸入文件進行測試,但我無法弄清楚爲什麼會發生這種情況。
- 該程序就不再進一步介紹,因爲我得到一個EmptyCollectionException(因爲它說,該隊列是空的)在這一行:
lowercaseArray.get (項++)等於(arrayQueues.get(k)的.dequeue());
但我找不出原因;當我向我的教授展示我的代碼時,她表示邏輯是正確的,所以我希望我們都忽略了一些東西。
此外,我不知道如何讓我的代碼以降序打印。
我真的很感謝一些幫助。
1.因爲您的'toString'附加到空字段'results'。使它成爲一個局部變量並將其初始化爲空字符串:'String results =「」;' – teppic