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学习):
- 您可能不想将
leftToRight
和 rightToLeft
传递给 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);
我在 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学习):
- 您可能不想将
leftToRight
和rightToLeft
传递给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);