在多维数组中搜索特定行

5

我刚开始学习Java编程,但是在我的作业中有一个问题让我无法理解。

我们被要求创建一个静态方法,用于搜索一个二维数组并比较其中的数字和输入的数字。代码如下:

private static int[] searchArray(int[][] num, int N){

现在,我们需要返回一个新的一维数组,告诉我们每一行第一个比参数变量N大的数字的索引。如果没有数字比N大,则在该数组位置返回-1。

例如,有一个名为“A”的多维数组:

4 5 6

8 3 1

7 8 9

2 0 4

如果我们使用这个方法,并执行searchArray(A, 5),答案将是“{2,0,0,-1}”。

2个回答

2

这里有一个非常好的关于Java 2D数组的解释。

    int num[][] = {{4,5,6},{8,3,1},{7,8,9}};
    int N = 5;
    int result[] = new int[num.length];
    for(int i=0; i<num.length; i++){
        result[i] = -1;
        for(int j=0; j<num[0].length; j++){
            if( N < num[i][j] ){
                result[i] = j;
                break;
            }
        }
    }

    for(int i=0; i<result.length; i++){
        System.out.println(result[i]);
    }

第一个for循环(其中包含一个for)从上到下、从左到右遍历2D数组。首先它遍历4,然后是5、6、8、3、1、7、8、9。

首先创建结果数组。长度取决于num的行数。如果没有比N大的数字,则将result[i]设置为-1。如果找到了一个比N大的数字,则保存列索引result[i]=j,并使用break退出for循环,因为我们只想找到第一个大于N的数字的索引。

最后一个for循环只是打印结果。


0
通常在使用多维数组时,您会使用嵌套的for循环:
for(int i = 0; i < outerArray.length; i++){
   //this loop searches through each row
   for(int j = 0; j < innerArrays.length; j++) {
     //this loop searches through each column in a given row
     //do your logic code here
   }
}

我不会给你更多的基本结构,因为你需要理解这个问题;在未来你会经常遇到这样的结构,但这应该能让你开始。


我理解了大部分,因为我们的任务大多是遍历多维数组并替换值、相乘等。但我不明白的主要部分是如何处理整个“行”概念。我是否需要在已经给出的两个嵌套for语句中再添加一个来使其在每一行之后执行某些操作? - Cameron
对行的操作将放在外部for循环内,该循环遍历行。放置在那里的逻辑每行只调用一次。 - Raskolnikov
@Cameron:Raskolnikov基本上已经给出了解决问题的大部分方案。正如他在上面的评论中所述,第一个(外部)循环迭代行,而第二个(内部)循环迭代从第一个循环选择的行中的项。现在您需要将比较逻辑添加到代码中。 - Prabu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接