2016-10-23 5 views
3

EDIT:Tim Biegeleisenのおかげで元のExceptionエラーが修正されました。if(scan.hasNextInt())をコメントに追加する行に追加します。しかし、出力ファイルは期待される結果の代わりにゼロを返します。Java:出力ファイルでゼロを得る

私のコードは非常に素人ですが、私はまだまだ初心者ですので、私に負担してください。事前にどうもありがとうございました!

EDIT2: それはこのように構成されているからの入力を受け取り、テキストファイル:

50 50 50 50 50 50 
65 73 45 98 90 76 
33 90 75 34 42 55 
56 86 88 99 23 97 
65 78 79 98 70 87 
50 50 50 50 50 50 
65 73 45 98 90 76 
33 90 75 34 42 55 
56 86 88 99 23 97 
65 78 79 98 70 87 
50 50 50 50 50 50 
65 73 45 98 90 76 
33 90 75 34 42 55 
56 86 88 99 23 97 
65 78 79 98 70 87 
50 50 50 50 50 50 
65 73 45 98 90 76 
33 90 75 34 42 55 
56 86 88 99 23 97 
65 78 79 98 70 87 
50 50 50 50 50 50 
65 73 45 98 90 76 
33 90 75 34 42 55 
56 86 88 99 23 97 
65 78 79 98 70 87 
50 50 50 50 50 50 
65 73 45 98 90 76 
33 90 75 34 42 55 
56 86 88 99 23 97 
65 78 79 98 70 87 

EDIT3:問題は、それは超えないということであるように思えるいくつかのための最初の場所であれば理由。

+0

(scan.hasNextInt())を追加して問題を修正しましたが、何らかの理由で出力ファイルの値がすべてゼロになっていました。合計得点、合格者の平均と人数、すべてゼロ。 – beta4attack

+0

デバッガを使用することをお勧めしますか? stackoverflowを尋ねるよりはるかに効率的です... – meriton

答えて

0

NoSuchElementExceptionは、スキャナに(この場合は)もう読み込むintがない場合にスローされます。

私はあなたの.txtファイルの構造を知らないので、あなたの質問に追加することができれば嬉しいです。

おそらくソリューションは、次の手順を実行して、スキャナのオフセットをリセットするために次のようになります。

scan.close(); 
scan = new Scanner(f); 
for (int i = 0; i < 30; i++) { 
    for (int j = 0; j < 6; j++) { 
     subjects[i][j] = scan.nextInt(); 
    } 
} 

EDIT:

このコードは私のために働いた:

public static void main(String[] args) throws Exception { 
    Scanner scan = new Scanner(new FileInputStream(new File("file.txt"))); 
    PrintWriter p = new PrintWriter("Class_report.txt"); 
    int x = 0, num1 = 0, num2 = 0, num3 = 0, num4 = 0, num5 = 0, num6 = 0; 
    double avg1 = 0, avg2 = 0, avg3 = 0, avg4 = 0, avg5 = 0, avg6 = 0; 
    int[] total = new int[30]; 
    int[] number = new int[6]; 
    int[][] subjects = new int[30][6]; 
    double[] average = new double[6]; 
    for (int i = 0; i < 30; i++) { 
     for (int j = 0; j < 6; j++) { 
      x = x + scan.nextInt(); 
     } 
     total[i] = x; 
     x = 0; 
    } 

    scan = new Scanner(new FileInputStream(new File("file.txt"))); 
    for (int i = 0; i < 30; i++) { //Exception starts appearing from this line. 
     for (int j = 0; j < 6; j++) { 
      subjects[i][j] = scan.nextInt(); 
     } 
    } 
    for (int i = 0; i < 30; i++) { 
     avg1 = avg1 + (double) subjects[i][0]; 
     avg2 = avg2 + (double) subjects[i][1]; 
     avg3 = avg3 + (double) subjects[i][2]; 
     avg4 = avg4 + (double) subjects[i][3]; 
     avg5 = avg5 + (double) subjects[i][4]; 
     avg6 = avg6 + (double) subjects[i][5]; 
    } 
    average[0] = avg1/30; 
    average[1] = avg2/30; 
    average[2] = avg3/30; 
    average[3] = avg4/30; 
    average[4] = avg5/30; 
    average[5] = avg6/30; 
    for (int i = 0; i < 30; i++) { 
     if (subjects[i][0] >= 50) { 
      num1++; 
     } 
     if (subjects[i][1] >= 50) { 
      num2++; 
     } 
     if (subjects[i][2] >= 50) { 
      num3++; 
     } 
     if (subjects[i][3] >= 50) { 
      num4++; 
     } 
     if (subjects[i][4] >= 50) { 
      num5++; 
     } 
     if (subjects[i][5] >= 50) { 
      num6++; 
     } 
    } 
    number[0] = num1; 
    number[1] = num2; 
    number[2] = num3; 
    number[3] = num4; 
    number[4] = num5; 
    number[5] = num6; 
    scan = new Scanner(new FileInputStream(new File("file.txt"))); 
    for (int i = 0; i < 30; i++) { 
     for (int j = 0; j < 6; j++) { 
      x = x + scan.nextInt(); 
     } 
     total[i] = x; 
     x = 0; 
    } 
    for (int i = 0; i < 30; i++) { 
     p.println("Total score of student #" + (i + 1) + ": " + total[i]); 
    } 
    for (int i = 0; i < 6; i++) { 
     p.println("Number of passing student in subject#" + (i + 1) + ": " + number[i]); 
    } 
    for (int i = 0; i < 6; i++) { 
     p.println("Average score in subject#" + (i + 1) + ": " + average[i]); 
    } 
    p.close(); 
} 

私が言ったように、私はちょうどそれの新しいインスタンスを作成してスキャナのポインタをリセットします。単に "file.txt"をファイルパスに置き換えてください。

+0

ああ、申し訳ありません!私は入力テキストファイルの構造を追加しました。そのために残念! – beta4attack

+0

あなたの答えはありがとう、それは働いた! :D – beta4attack

0

まあ、あなたはtotalに完全にすべての数字を読んでいます。しかし、あなたは何も読んでいないが、まだ試してみる。だからあなたは0numbersubjectsおよびaverageのすべてのセルにあるように読むことはありません。さらに、補充しようとすると、total0に上書きします。

だから... Class_scores.txtを閉じてもう一度開くか、最初にそれを読んで、この場合は何かをお勧めします。

File全体を読むと、最初から読むことができなくなります。

+0

それを解決した方のコードからそれを実現しました。ご回答どうもありがとうございました! – beta4attack

関連する問題