对数组

时间:2016-04-05 20:56:28

标签: java arrays if-statement

在评论步骤4中,我尝试将当前数组元素添加到sum,将当前数组元素与max_test进行比较,如果它更大,则将其保存在变量max_test中。并将当前元素与min_test进行比较,如果它更小,则将其保存在min_test中。然而,我继续得到错误

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);
  }
}

4 个答案:

答案 0 :(得分:1)

您无法使用运算符>来比较int[]类型。 Java不支持运算符重载。那些关系运算符><>=<=)仅应用于数字基元数据类型。

您的意思是grades[r][c] > grades[r][max_test]grades[r][c] < grades[r][min_test]吗?

答案 1 :(得分:1)

您的问题是grades[r]不是整数。它是整数的array。你必须解决两个指数

sum += grades[i][j];

为了摆脱编译错误。

其他错误似乎相同。一般来说,你可以想象如下:

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

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

等..

答案 2 :(得分:1)

如果一个测试的等级在您的阵列中是水平的,那么您只需要两个循环,而不是三个循环。

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);
}

答案 3 :(得分:0)

这是有效的,因为在比较时成绩需要2个部分

    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];