2014-10-10 43 views
0

我正在嘗試編寫從數組中讀取一行字符的代碼,將這些字符分配給一個整數,然後對該行的所有整數進行平均,然後對數組中的每一行執行此操作。以下是我迄今爲止:從數組中讀取並計算平均值

Scanner in = new Scanner(new File("Grades.txt")); 

while(in.hasNextLine()) { 
    int gp = 0; 
    double gpa = 0; 
    String line = in.nextLine(); 

    if(line.length() == 0) { 
     continue; 
    } 

    line = line.substring(line.length()-15, line.length()); 

    String[] letters = line.split(" "); 

    for (int i = 0; i < letters.length; i++) { 

    if (letters[i].equals("H")) { 
     gp += 7; 
    } 
    else if (letters[i].equals("D")) { 
     gp += 6; 
    } 
    else if (letters[i].equals("C")) { 
     gp += 5; 
    } 
    else if (letters[i].equals("P")) { 
     gp += 4; 
    } 
    else if (letters[i].equals("F")) { 
     gp += 0; 
    } 
    } 

    gpa = gp/letters.length; 

    System.out.println(gpa); 
} 

這裏是我一起工作的數組:

[, D, D, C, P, H, H, C] 
[, H, H, H, D, D, H, H] 
[, C, F, C, D, C, C, C] 
[, F, F, F, P, C, C, C] 
[, F, C, F, C, D, P, D] 
[, D, D, F, D, D, F, D] 
[, P, F, P, F, P, F, P] 

這裏是代碼的電流輸出:

5.0 
6.0 
3.0 
2.0 
3.0 
4.0 
2.0 

內容的文本文件:

45721 Chris Jones D D C P H H C D 
87946 Jack Aaron H H H D D H H H 
43285 Ben Adams C F C D C C C P 
24679 Chuck Doherty F F F P C C C F 
57652 Dean Betts F C F C D P D H 
67842 Britney Dowling D D F D D F D D 
22548 Kennedy Blake P F P F P F P P 

我在正確的道路上嗎?會有更簡單的方法嗎?任何幫助將不勝感激。

+2

最佳的方式告訴如果你這樣做是正確的是也是最簡單的:運行您的代碼並檢查答案! – 2014-10-10 05:11:10

+0

@ musical_coder @ musical_coder我的錯誤,我已經運行代碼,只是打印輸出,但它只顯示每行的第一個字母的值 – AJJ 2014-10-10 05:14:02

回答

1

只是一個快速照會您節省一些悲痛後

不應該

line = line.substring(line.length()-16, line.length()-1); 

是不是

line = line.substring(line.length()-15, line.length()); 

把所有的成績?

然後你需要把你的if語句成一個for循環中,遍歷數組中的每個值(更換letters[1]letters[i]

+0

我已更新我的代碼與line.length更改和for循環建議,我有還添加了輸出,但似乎仍然不正確,因爲第一行的實際總和應該是46.我錯過了什麼? – AJJ 2014-10-10 05:32:05

+0

其他行輸出似乎得到正確的值......第一行(選項卡,而不是空間)中是否有錯誤的字符?編輯:其實第二行也是錯誤的,也許檢查前兩行的任何問題,甚至是換行符? – 2014-10-10 05:36:28

+0

我讀到的數組和文本文件似乎對所有行都是一致的,我將發佈文本文件的內容 – AJJ 2014-10-10 05:43:53