2017-05-03 82 views
0

因此,我們希望應用程序允許用戶輸入學生的姓名和成績,並提示用戶輸入要創建的文件的名稱以及要輸入的學生數量(每個學生1個等級)。然後該程序將獲取所有成績並對其進行平均。問題是它沒有讀取文件,總是給我們-0.0的平均值。Java文件問題

`

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

    System.out.println("What is the name of the file you would like to create?"); 
    filename = p.next(); 

    File fd = new File(filename + ".txt"); 
    fd.createNewFile(); 
    students(fd); 
} 

public static void students(File fd) throws IOException { 
    int numbstudents; 
    FileWriter ap = new FileWriter(fd, true); 
    BufferedWriter ad = new BufferedWriter(ap); 

    System.out.println("How many students would you like to add?"); 
    numbstudents = p.nextInt(); 
    int i = 0; 
    while (i != numbstudents) { 
     for (i = 0; i < numbstudents; i++) { 
      System.out.println("What is the name of student number " + i + " ?"); 
      String name = p.next(); 
      ad.write(name); 
      ad.newLine(); 
      System.out.println("What grade did student number " + i + " acheive?"); 
      String a = f.next(); 
      ad.write(a); 
      ad.newLine(); 

     } 
    } 

    read(fd); 
    ad.close(); 
} 

public static void read(File fd) throws FileNotFoundException { 

    int counter = 0; 
    FileReader h; 
    BufferedReader g; 
    String test; 
    double average, total = 0; 
    int number = 0; 
    int i = 0; 
    try { 
     h = new FileReader(fd); 
     g = new BufferedReader(h); 
     while ((test = g.readLine()) != null) { 
      number += 1; 
      System.out.println(test); 
      counter = counter + 1; 
      i = counter % 2; 
      if (i == 0) { 
       total += Double.parseDouble(test); 
      } 

     } 
     average = total/(number - 1); 
     System.out.println("The students average is: " + average); 

     g.close(); 
     fd.delete(); 
    } catch (FileNotFoundException e) { 
     System.out.println("File could not be found."); 
    } catch (IOException e) { 
     System.out.println("Your file could not be read."); 
    } 

} 

} `

+1

嘗試調用'ad.close();''之前'讀取(fd);' – nandsito

+0

也許問題是文件的內容;不能說,因爲你沒有分享它。 –

+0

我想嘗試使用這裏提到的掃描儀:[使用掃描儀讀取.txt文件](http://stackoverflow.com/questions/13185727/reading-a-txt-file-using-scanner-class-in- JAVA) –

回答

3

您正在嘗試從文件中讀取您已經關閉了作家之前。

close()調用包括將緩存的數據刷新到磁盤。您在數據刷新到磁盤之前正在讀取數據。

作爲一個側面說明,考慮你這個語句對完成的事情:

while (i != numbstudents) { 
    for (i = 0; i < numbstudents; i++) { 

while是不必要的。 for陳述重複了舒適麻木的學生。

還要注意兩者之間的差異。通常,在遍歷數字時,使用'<','< =','>'或'> ='比'=='或'!='更安全。否則,如果您在平等條件之前通過端點,則它將繼續愉快地繼續結束。

最後,考慮用描述性動詞短語命名你的方法。這將幫助您將大問題分解成更小的部分。例如,您可以使用一種稱爲inputStudents()的方法,該方法讀取輸入並創建並關閉該文件,該文件在讀取文件並計算平均值的另一個方法printAverageOfStudents()之前調用。