我正在做的一个项目要求我在二维数组中找到水平和垂直总和。所以它几乎是一个单词搜索(不使用对角线),但是程序不是查找单词,而是查找加起来为int sumToFind的相邻数字。下面的代码是我到目前为止找到的水平和,我们应该实现一个公共静态int [] [] verticalSums。由于我还没有完成该程序,我想知道,首先,如果我有什么工作,其次,数组verticalSums将如何与下面的代码不同。谢谢
public static int[][] horizontalSums(int[][] a, int sumToFind) {
int i;
int start;
int sum = 0;
int copy;
int [][] b = new int [a[0].length] [a.length];
for (int row = 0; row < a.length; row++) {
for ( start = 0; start < a.length; start++) {
i = start;
sum = i;
do {
i++;
sum = sum + a[row][start];
}
while (sum < sumToFind);
if(sum == sumToFind) {
for (copy = start; copy <= i; copy++) {
b[copy] = a[copy];
}
}
for (i = 0; i < a[0].length; i++) {
if (b[row][i] != a[row][i])
b[row][i] = 0;
}
}
}
return b;
}
答案 0 :(得分:1)
你的代码不起作用....(你的问题是“如果我有什么工作?”这就是你的答案)。
您将int[][] b
数组声明为new int [a[0].length] [a.length]
,但我认为您的意思是:new int [a.length] [a[0].length]
,因为您将row
变量基于a.length
,后来使用{ {1}}。
因此,如果您的数组是“矩形”而不是方形,那么a[row][i]
数组就会出现索引越界问题。
您的评论不存在,这使您的问题/代码难以阅读。
此外,您还有以下问题:
b
其中sum = i
和i = start
是数组中的索引,而不是数组值。所以,你的总和将永远是正确的,因为你是对索引求和,而不是数组值。start
,但继续使用i++
,因此您只需将值添加到自身,而不是“下一个”值。此时很明显你的代码被严重破坏了。
您需要与能够向您展示调试器工作原理的人员保持友好关系,并且您可以更加全面地解决问题。
答案 1 :(得分:0)
测试非常简单
public static void main(String[] args) {
int[][] a = {{1, 2}, {1, 0}};
int[][] result = Stos.horizontalSums(a, 1);
System.out.println(Arrays.deepToString(result));
}
结果
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
当您解决此问题时,应该打印出类似这样的内容
[[1, 2], [1, 0]]