2014-01-28 60 views
1

需要一些幫助來解決這個問題。 我想從data.txt輸入數據到bsorted.txt中,並使用bubbleSort進行排序。將文件中的數據讀入數組,然後將數據輸出到另一個文件中

我需要在數據文件中生成隨機數字和字母,並將它們讀入數組並在排序到另一個文本文件後輸出這些數據。

我收到一個NoSuchElementException

Exception in thread "main" java.util.NoSuchElementException: No line found at java.util.Scanner.nextLine(Unknown Source) at SortingExample.main(SortingExample.java:257) 

代碼:

class dataFile { 

public static void dataFile() { 
    try { 
     PrintWriter writer = new PrintWriter("data.txt"); 
     String alphaNumerics = "qwertyuiopasdfghjklzxcvbnm1234567890"; 
     String t = ""; 
    for (int i = 0; i < 2000; i++) { 
     t += alphaNumerics.charAt((int) (Math.random() * alphaNumerics.length())); 
    } 
     writer.println(t); 
     writer.close(); 
    } 
    catch(Exception ex) { 
     System.out.println("Error accessing file."); 
     System.out.println("Reason was: "+ex.getMessage()); 
     ex.printStackTrace(); 
    } 
    } 
} 

class SortingExample { 

public static void main(String[] args) throws IOException { 
    dataFile.dataFile(); 

    Scanner bscan = new Scanner(new File("data.txt")); 
    PrintWriter bsorted = new PrintWriter("bsorted.txt"); 
    StringType[] strings = new StringType[2000]; 
    for (int i = 0; i < strings.length; i++){ 
     strings[i] = new StringType(bscan.nextLine()); 
    } 

    Sort.bubbleSort(strings); 
    bsorted.println("Bubble Sort number of comparisons: " + Sort.bubbleComp + "\r\n" + "Bubble Sort number of exchanges: " + Sort.bubbleEx + "\r\n"); 
    for (int i = 0; i < strings.length; i++) { 
     bsorted.println(strings[i].toString()); 
    } 
    bsorted.close(); 
    } 
} 

任何人的一些想法幫助我嗎?

+2

發佈你的例外,它會給人們一個很好的開始幫助你的地方。 –

回答

0

在繼續閱讀掃描儀的下一行之前,您需要檢查Scanner.hasNextLine()是否爲真。這將幫助您確定您是否安全地到達了文件結尾標記。

因此你for loop是:

for (int i = 0; i < strings.length; i++) { 
    if (bscan.hasNextLine()) 
     strings[i] = new StringType(bscan.nextLine()); 
} 

或者,您在try處理,並搭上NoSuchElementException

try { 
    for (int i = 0; i < strings.length; i++) { 
     strings[i] = new StringType(bscan.nextLine()); 
    } 
} catch (NoSuchElementException ex) { 
    // Do Nothing 
} 
0

它看起來對我來說,循環次數多,你有被繞來繞去文件中的行。

您的data.txt文件中的行數可能少於2000行,但for循環仍會嘗試執行2000次左右,並且每次都從該文件讀取另一行。

我建議你找出data.txt中有多少行,並多次遍歷for循環。

試試這個代碼,以確定的行數:

LineNumberReader lnr = new LineNumberReader(new FileReader(new File("data.txt")));

lnr.skip(Long.MAX_VALUE);

然後,所有你需要做的就是到處去你的循環lnr.getLineNumber()倍。

0

每代碼:

for (int i = 0; i < 2000; i++) { 
    t += alphaNumerics.charAt((int) (Math.random() * alphaNumerics.length())); 
} 
    writer.println(t); 
    writer.close(); 

看樣子你附加的一切,將一個字符串,並作爲一個大線一次寫出來的。換句話說,你有2000個元素連接成一個字符串。

您的掃描儀正在查找2000行,因此當它只看到一行時會失敗。

我的建議是寫出來的多線如下:

for (int i = 0; i < 2000; i++) { 
    t = alphaNumerics.charAt((int) (Math.random() * alphaNumerics.length())); 
    writer.println(t); 
} 

writer.close(); 

題外話,但也有許多約定,讓我從一個面向對象的角度來看暫停,如較低的情況下,類名(數據文件),一個不像動詞的方法名(dataFile)

+0

我其實做了編輯,我想我必須刪除data.txt才能刷新。 – user3245435

+0

我修正了一些問題,現在data.txt中的數據已經被排序,出於某種原因。 – user3245435

相關問題