2016-04-05 11 views
1

コメントステップ4で、現在の配列要素をsumに追加しようとしています。現在の配列要素をmax_testと比較し、大きければ変数max_testに保存します。現在の要素をmin_testと比較します。小さい場合はmin_testに保存します。しかし、私はエラー配列でifステートメントを使用する

Grades5.java:55: error: bad operand types for binary operator '>' 
     if (grades[r] > grades[max_test]) 
        ^
    first type: int[] 
    second type: int[] 

Grades5.java:57: error: bad operand types for binary operator '<' 
     if (grades[r] < grades[min_test]) 
        ^
    first type: int[] 
    second type: int[] 

Grades5.java:59: error: bad operand types for binary operator '+' 
      sum += grades[r]; 
      ^
    first type: int 
    second type: int[] 

3 errors 

コードを取得し続ける:

import java.util.Scanner; 

public class Grades5 
{ 
    public static void main(String[] args) 
    { 
int[][] grades = { 
        { 87, 96, 100}, 
        { 68, 75, 72}, 
        { 99, 100, 95}, 
        {100, 96, 70}, 
        { 75, 60, 79}, 
       }; 
int how_many_grades = grades.length * grades[0].length; 

// ----------------- 
// Output the grades 
// ----------------- 
System.out.print("   "); 
for (int i = 0; i < grades[0].length; i++) 
    System.out.print("Test " + (i + 1) + " "); 
System.out.println("Average"); 
for (int r = 0; r < grades.length; r++) 
{ 
    int sum = 0; // Sum of one student's tests 

    // ------------------- 
    // Process one student 
    // ------------------- 
    System.out.print("Student " + (r + 1) + " "); 
    for (int c = 0; c < grades[r].length; c++) 
    { 
    System.out.printf("%6d ", grades[r]);              // Step 1 
     //sum += grades[c];                  // Step 2 
    } 
    System.out.printf("%7.2f\n", (double)sum/grades[r].length); 
} 

// ---------------- 
// Output a summary 
// ---------------- 
int max_test, // Maximum test score 
    min_test, // Minimum test score 
    sum = 0; // Sum of all student tests 

max_test = min_test = grades[0][0]; // Step 3 
for (int r = 0; r < grades.length; r++) 
{ 
    // ------------------- 
    // Process one student 
    // ------------------- 
    for (int c = 0; c < grades[r].length; c++) 
    { 
            // Step 4 
    if (grades[r] > grades[max_test]) 
     max_test = c; 
    if (grades[r] < grades[min_test]) 
     min_test = c; 
     sum += grades[r]; 
    } 
} 
System.out.println("Highest test score: " + max_test); 
System.out.println("Lowest test score: " + min_test); 
System.out.printf("Average test score: %.1f\n", 
        (double)sum/how_many_grades); 
    } 
} 
+0

を比較するときの成績は成績が[max_test] 'であり、何それはあなたのエラーメッセージから意味'何 'グレード[R]について考え'と2部を必要とするので、これは動作します。これは 'int []> int []'を実行しようとしていると言います。本質的に2つの整数配列を比較します。 – nickb

+0

2次元配列であるため、等級[r]ではなく等級[r] [c]でなければなりません。 –

+0

元の問題を解決した答えが得られたという理由だけで、質問を簡単に変更することはできません。あなたが困っていると思ったら、答えを受け入れて別の質問をしてください。しかし、コミュニティが本当に問題を抱えていないことに気をつけてください。 – displayname

答えて

1

あなたはint[]タイプを比較する演算子>を使用することはできません。 Javaは演算子のオーバーロードをサポートしていません。それらの関係演算子><>=<=)は数値プリミティブデータ型にのみ適用されます。

grades[r][c] > grades[r][max_test]grades[r][c] < grades[r][min_test]のようなものですか?

+0

スレッド「main」java.lang.ArrayIndexOutOfBoundsException:87 \t、Grades5.main(Grades5.java:55) – Beeeee

+0

@Brentにもう1つの例外が生成される場合は、短期間に2回「ArrayIndexOutOfBoundsException」を要求しています。この例外と配列の使い方についてお読みください。 – Andrew

+0

@Brent、私はあなたのための完全な作業コードを書く必要はありません – Andrew

1

問題は、grades[r]は整数ではありません。整数のarrayです。コンパイルエラーを取り除くには、2つのインデックスをアドレス指定する必要があります。

sum += grades[i][j]; 

他のエラーでも同じように見えます。一般的には次のようにあなたがそれを想像することができます:

grades[1] -> { 87, 96, 100} 
grades[2] -> { 68, 75, 72} 

grades[1][1] -> 87; 
grades[1][2] -> 96; 

などを...

1

つのテストのためのグレードは、あなたの配列に水平である場合、あなたは2つだけのループを必要とし、 3つではありません。

for (int test = 0; test < grades.length; test++) { 
    System.out.print("Test " + (test + 1) + " "); 

    System.out.println("Average"); 
    int sum = 0; // Sum all grades on this test 
    for (int student = 0; student < grades[test].length; student++) 
    { 
     System.out.print("Student " + (student + 1) + " "); 
     sum += grades[student]; 
    } 
    System.out.println(); 
    System.out.printf("%7.2f\n", (double)sum/grades[test].length); 
} 
0

if (grades[r][c] > max_test) 
     max_test = grades[r][c]; 
    if (grades[r][c] < min_test) 
     min_test = grades[r][c]; 
     sum += grades[r][c]; 
+0

ちょうどあなたの質問を更新する、新しい回答を追加しないでください – Andrew

関連する問題