循环遍历2D数组并搜索某个值,然后打印出一个元素

时间:2014-07-18 19:03:11

标签: java arrays

所以我想搜索索引总和为0的二维数组,然后打印出该数组索引中的一个元素。然后我想再次遍历数组,找到索引的和为1,然后打印出该数组索引中的一个元素,依此类推......

例如:

0 = array[0][0] = apple

1 = array[0][1] = banana
1 = array[1][0] = coffee

2 = array[2][0] = danish
2 = array[1][1] = eggs
2 = array[0][2] = fish

and so on

唯一的问题是我不知道如何绕过这个循环。这是一个家庭作业,所以我很感激如何解决这个问题。

请不要用勺子喂我的答案,我更喜欢小费或暗示以便学习。


    for (int i = 0; i < numRows; i++) {
        for (int j = 0; j < numColumns; j++) {
            sum = i + j;
            System.out.println("sum: " + sum);
        }
    }

输出:

sum: 0
sum: 1
sum: 2
sum: 3  
sum: 1
sum: 2
sum: 3
sum: 4
sum: 2
sum: 3
sum: 4
sum: 5

4 个答案:

答案 0 :(得分:3)

我会给你一些提示。

提示#1:您不必遍历数组。

提示#2:您猜测的数字可以说3。始终是可以添加以创建总和的最高数字。

  • 3是最高
  • 0总是最小的。

提示#3:将此问题视为ij之间的计算问题,然后访问数组。


如果您想要实际答案或更多提示,请告诉我:D

答案 1 :(得分:1)

首先循环显示sum值,从0numRows + numColumns - 2(最大可能索引的总和)。

在此循环中,使用i循环遍历可能的行值。通过从j中减去i来计算列值sum

如果索引ij有效,则访问该数组并打印该值。

答案 2 :(得分:0)

如果您不关心时间复杂性,可以使用if语句。

for(int k=0; k<MaxSum; k++) {
    for (int i = 0; i < numRows; i++) {
        for (int j = 0; j < numColumns; j++) {
            sum = i + j;
            if(sum == k) {
                System.out.println("sum: " + sum);
            }
        }
    }
}

答案 3 :(得分:0)

你可以在O(n)中完成它,你甚至不需要遍历整个二维数组。找到加起来一定数量的索引集可以在O(n)时间完成。但是,查找x的所有可能值的所有索引将需要O(n^2)

让我们考虑一下你想做什么。我们可以首先观察维度A的二维数组m x n,你想找到所有ij,总结为特别值x只要x小于或等于m + n - 2(因为您可以访问的最高值为A[m - 1][n - 1],并且i < mj < n

现在想一想通过总结两个不同的值xi来生成值j的不同方法。 ij可能带来哪些可能的值?例如,如果x7,则i可以是0j可以是7,反之亦然。您还可以i6j1,反之亦然。想想你将如何生成一组这样的值。但是,您需要记住,您生成的所有这些对都无效。您有ij需要适合数组维度的附加约束。