【问题标题】:Using an if statement with arrays对数组使用 if 语句
【发布时间】:2016-07-26 00:23:18
【问题描述】:

在注释步骤 4 中,我尝试将当前数组元素相加,将当前数组元素与 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);
  }
}

【问题讨论】:

  • 想想grades[r]grades[max_test] 是什么,以及从您的错误消息中这意味着什么。它说你正在尝试做int[] &gt; int[],本质上是比较两个整数数组,这可能不是你打算做的。
  • 应该是grades[r][c],而不是grades[r],因为它是一个二维数组。
  • 你不能仅仅因为你得到的答案解决了你原来的问题就改变你的问题。如果您认为自己陷入困境,请接受一个答案并提出另一个问题 - 但请注意,社区并不真正欢迎仅使用调试器就可以避免的问题(至少如果问题是微不足道的)。

标签: java arrays if-statement


【解决方案1】:

您不能使用运算符&gt; 来比较int[] 类型。 Java 不支持运算符重载。这些关系运算符&gt;&lt;&gt;=&lt;=)仅适用于数字原始数据类型。

您的意思是grades[r][c] &gt; grades[r][max_test]grades[r][c] &lt; grades[r][min_test] 之类的吗?

【讨论】:

  • 在线程“main”中产生另一个异常 java.lang.ArrayIndexOutOfBoundsException: 87 at Grades5.main(Grades5.java:55)
  • @Brent,您在短时间内询问了 2 次 ArrayIndexOutOfBoundsException,我建议您阅读有关此异常以及如何使用数组的信息。
  • @Brent,我不必为你编写完整的工作代码
【解决方案2】:

您的问题是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;

等等..

【讨论】:

    【解决方案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);
    }
    

    【讨论】:

      【解决方案4】:

      这很有效,因为比较时成绩需要 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]; 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-19
        • 1970-01-01
        相关资源
        最近更新 更多