Error: int cannot be converted to int[][]

Error: int cannot be converted to int[][]

我在 HackerRank(对角差分)上做这道题,我现在遇到了一个问题。

这是问题的 link:
https://www.hackerrank.com/challenges/diagonal-difference/problem

问题是我不断收到错误消息:int cannot be converted to int[][]
我尝试初始化变量 j 但这也没有解决问题。

这是我的代码:

import java.util.*;
public class DiagonalDifference {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        int a[][] = new int[3][3]; //Initializing the array of 3X3

        //Assuming i: rows and j: columns
        int i, j, leftToRight = 0, rightToLeft = 0;
        for (i = 0; i < 3; i++) {
            for (j = 0; j < 3; j++) {
                a[i][j] = sc.nextInt();
            }
        }
        diagonalDiff(a[i][j], leftToRight, rightToLeft);
    }

    static int diagonalDiff(int a[][], int leftToRight, int rightToLeft) {
        leftToRight = a[0][0] + a[1][1] + a[2][2];
        rightToLeft = a[0][2] + a[1][1] + a[2][0];

        int diff = Math.abs(leftToRight - rightToLeft);
        return diff;
    }
}

如果有人能向我解释我做错了什么,我将不胜感激。 谢谢。

diagonalDiff 方法的第一个参数是数组 (2-D)。但是你在调用它时传递了一个 int 。 (a[i][j] 将是 int

尝试这样称呼它:

diagonalDiff(a, leftToRight, rightToLeft);

执行此操作后,您可能还不需要在循环之前初始化 j


其他suggestions/nitpick(与本题无关,但有助于OP学习):

  • 您可能不想将 leftToRightrightToLeft 传递给 diagonalDiff,因为您要覆盖传递的值并从头开始计算它们。
  • 您可以将循环写成 for(int i=0; i<3; i++) 而不是在循环外声明 int。这是更普遍遵循的惯例。
  • 最好将 diagonalDiff 声明为 private,因为它不会在此 class 之外使用。
  • 看起来您正在调用 diagonalDiff 但忽略了值 returned。您可能想要使用该值。
  • 您可以直接return计算出的diff而不是将其存储在变量中。

您的方法 diagonalDiff 接受二维整数数组,但您传递给它的是 a[i][j],它是该数组的一个元素,它只是一个整数。

diagonalDiff 的第一个参数必须是 int[][] 类型,而你传递它 a[i][j],它是变量 a 中位置 [=] 中的整数15=]。因此,正如错误所说,您将整数作为参数提供给“整数数组数组”类型的参数,这当然不起作用。

如果您想将对矩阵的引用传递给您的方法,您可以将调用 diagonalDiff 的方式更改为:

diagonalDiff(a, leftToRight, rightToLeft)

如果我们想将数组传递给另一个方法,我们使用数组地址作为 it.Array 地址也称为数组引用。 例如:-

int a[][] = new int[3][3];

在此数组数组地址为a.

所以 a[i][j] 表示您安装到 (i,j) 的某个元素。 所以在你的代码中,

 diagonalDiff(a[i][j], leftToRight, rightToLeft); 

a[i][j] 参数未传递任何 array.But 你的参数是二维类型 array.So 编译器说 int 无法转换为 int[][]。 所以代码应该是,

 diagonalDiff(a[i][j], leftToRight, rightToLeft);