在二维数组java中查找总和

时间:2013-11-16 22:46:06

标签: java multidimensional-array

我正在做的一个项目要求我在二维数组中找到水平和垂直总和。所以它几乎是一个单词搜索(不使用对角线),但是程序不是查找单词,而是查找加起来为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;

}

2 个答案:

答案 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]数组就会出现索引越界问题。

您的评论不存在,这使您的问题/代码难以阅读。

此外,您还有以下问题:

  1. 您设置b其中sum = ii = start是数组中的索引,而不是数组值。所以,你的总和将永远是正确的,因为你是对索引求和,而不是数组值。
  2. 在do..while循环中,您递增start,但继续使用i++,因此您只需将值添加到自身,而不是“下一个”值。
  3. 此时很明显你的代码被严重破坏了。

    您需要与能够向您展示调试器工作原理的人员保持友好关系,并且您可以更加全面地解决问题。

答案 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]]