2016-01-14 48 views
0

我正在嘗試寫入文件(leaders.txt),並且遇到了計算的數據在文件中顯示的方式問題。在Java中寫入文件錯誤

import java.io.*; 
import java.util.*; 
public class readStats { 
public static int getStat(String letter, String stats) { 
    int count = stats.length() - stats.replace(letter, "").length(); 

    return count; 
} 

public static void main(String[] args) throws FileNotFoundException { 
    String hitsLeader = null; 
    String walksLeader = null; 
    String hitsByPitchLeader = null; 
    String strikeoutsLeader = null; 
    String battingAverageLeader = null; 
    int maxHits  = 0; 
    int maxWalks  = 0; 
    int maxHitsByPitch = 0; 
    int maxStrikeouts = 0; 
    int maxBa   = 0; 

    java.io.File file = new java.io.File("stats.txt"); 
    Scanner input = new Scanner(file); 

    //Find out number for each category 
    while (input.hasNextLine()) { 
     String line = input.nextLine(); 
     String[] parts = line.split(" "); 
     int hits  = getStat("H", parts[1]); 
     int outs  = getStat("O", parts[1]); 
     int walks  = getStat("W", parts[1]); 
     int hitsByPitch = getStat("P", parts[1]); 
     int strikeouts = getStat("K", parts[1]); 
     int sacrifices = getStat("S", parts[1]); 
     int totalAtBats = hits + outs + strikeouts; 
     double ba = ((double)hits/(double)totalAtBats); 

     //System.out.println("Player " + parts[0]);  

     if (hits > maxHits) { 
      maxHits = hits; 
      hitsLeader = parts[0]; 
     } 


     if (walks > maxWalks) { 
      maxWalks = walks; 
      walksLeader = parts[0]; 
     } 

     if (hitsByPitch > maxHitsByPitch) { 
      maxHitsByPitch = hitsByPitch; 
      hitsByPitchLeader = parts[0]; 
     } 

     if (strikeouts > maxStrikeouts) { 
      maxHits = hits; 
      strikeoutsLeader = parts[0]; 
     }    

     if (ba > maxBa) { 
      maxHits = hits; 
      battingAverageLeader = parts[0]; 
     } 

     //Create PrintWriter 
     java.io.PrintWriter output = new java.io.PrintWriter("leaders.txt"); 

     // Print LEAGUE LEADERS to leaders.txt 
     output.println(parts[0]); 
     output.printf("BA: %.3f", ba); 
     output.println("H: " + hits); 
     output.println("BB: " + walks); 
     output.println("K: " + strikeouts); 
     output.println("HBP: " + hitsByPitch); 
     output.println(""); 
     output.println("LEAGUE LEADERS"); 
     output.println("BA: " + battingAverageLeader); 
     output.println("H: " + hitsLeader); 
     output.println("BB: " + walksLeader); 
     output.println("K: " + strikeoutsLeader); 
     output.println("HPB: " + hitsByPitchLeader); 
     output.close(); 
    } 

} 
} 

輸出在leaders.txt

Pudge 
BA: 0.450H: 9 
BB: 2 
K: 8 
HBP: 1 

LEAGUE LEADERS 
BA: Pudge 
H: Piazza 
BB: Griffey 
K: Pudge 
HPB: Griffey 

Stats.txt

Griffey HHOHOKWOHKSPOOWSHHWWWWWWW 
Piazza OOHHHKPSOHOOHWWHOSSSHHHHHHHHHHHHHHHHHHHHHHHHHHHHH 
Pudge HHHHKOOHHHSWWHHOPKKKKKKK 

所需的輸出

Griffey 
BA: 0.462 
H: 6 
BB: 9 
K: 2 
HBP: 1 

Piazza 
BA: 0.833 
H: 35 
BB: 2 
K: 1 
HBP: 1 

Pudge 
BA: 0.450 
H: 9 
BB: 2 
K: 8 
HBP: 1 

我需要輸出顯示文件stats.txt中關聯的所有三個玩家,而不僅僅是一個。

+0

請包括stats.txt – Alfabravo

+0

什麼是您的輸入文件? – Blaatz0r

+0

如何上傳輸入文件?我是新來的這個.... –

回答

0

在while循環之前啓動打印機,然後關閉它。
聯盟領導人只能打印一次。 當你有比較每個球員的數字後,移動循環後的那些。

java.io.PrintWriter output = new java.io.PrintWriter("leaders.txt"); 
while (input.hasNextLine()) { 
... 
} 
output.println("LEAGUE LEADERS"); 
output.println("BA: " + battingAverageLeader); 
output.println("H: " + hitsLeader); 
output.println("BB: " + walksLeader); 
output.println("K: " + strikeoutsLeader); 
output.println("HPB: " + hitsByPitchLeader); 
output.close(); 

編輯:添加

output.println(); 

output.printf("BA: %.3f", ba); 

printf沒有啓動一個新行。

+0

或者追加而不是覆蓋,但這會在稍後導致問題。 – Blaatz0r

+0

當我這樣做並打破聯盟領導者部分時,它會打印出不同的玩家。 –

+0

@DerrickHenicke我編輯了我的答案。 – Turamarth