2017-03-21 9 views
-2

私は、ファイルからグレードを読み込むプロジェクトに取り組んでいますが、ファイルには学生の名前とそのクラスも含まれています.3つのグレードと4つのグレードもあります。私はプログラムを実行しようとすると0エラーで分割を得ることに苦しんで、多くのグーグルグーグルの後にそれを理解することができません、Javaで初心者。私はファイルを開いても問題ありませんが、最初の行の平均を読み取って他のすべての行に続き、printlnの値を返す方法には苦労しています。ファイルから平均等級を計算する

ファイル(3つのグレード付き)内容:

//Happy CS145 81 85 91 
//Sneezy CS145 67 75 75 
//Doc CS145 92 97 89 
//Dopey CS111 
//Grumpy CS145 75 65 66 
//Bashful CS145 81 82 81 
//Sleepy CS145 71 74 71 

import java.io.FileReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

public class MainClass { 
    public static void main(String args[]){ 
     int numTestScores = 0; 
     int sum = 0; 
     int average = 0; 
     Scanner input = null; 
     try { 
      input = new Scanner(new File("PA2data2.txt")); 
     } catch (FileNotFoundException ex) { 
      System.out.println("Cannot open file - " + ex); 
     } 
     while (input.hasNext()) { 
      while (input.hasNextInt()){ 
       sum += input.nextInt(); 
       numTestScores++; 
      } 
      average = sum/numTestScores; 
      System.out.println(average); 
     } 
     System.out.println("Average is " + sum/numTestScores); 
     input.close(); 
    } 
} 
+1

これらの問題を解決する最良の方法は、デバッガを使用して各行をステップ実行することです。それは本当に使いやすいです。 –

+0

これを行う最も簡単な方法は、 'whole'行を読んでから' split'することです - 次に3つの 'int'値を加え、' 3'で割ります –

答えて

0

あなたはnextLineを(使用する必要があります)ではなくnextInt()も

while (input.hasNext()) { 
     String line = input.nextLine(); 
     String[] brokenLine = line.split(" "); 
      //do stuff with your array of {Happy, CS145, 81, 85, 91} 
        ... 
        ... 
     } 

、あなたはまたに行きます平均値ではなくint値でdoubleを使用する場合は、平均値が0になります。

0

だけif文の中、あなたの除算演算を保つ:

if(numTestScores > 0) { 
     average = sum/numTestScores; 
     System.out.println(average); 
}