在Java的二维数组中找到最大的数字

huangapple go评论88阅读模式
英文:

Finding the biggest number in java two-dimentional array

问题

以下是翻译好的部分:

我得到的输出是91。如果我修改 for(int j=0;j<=arr.length;j++),那么我得到的输出是92。但实际答案是93。

package basics;

public class maximumNumber {
    public static void main(String[] args) {
        int arr[][] = {{11,21,31,32,33},{41,51,61,62,63},{71,81,91,92,93}};
        int max = arr[0][0];

        for(int i=0;i<arr.length;i++) {
            for(int j=0;j<arr[i].length;j++) {
                if(arr[i][j]>max) {
                    max=arr[i][j];
                }
            }
        }

        System.out.println(max);
    }
}
英文:

I am getting output as 91. If I alter for(int j=0;j<=arr.length;j++) then I am getting output as 92. But the actual answer is 93.

package basics;

public class maximumNumber {
    public static void main(String[] args) {
        int arr[][] = {‌{11,21,31,32,33},{41,51,61,62,63},{71,81,91,92,93}};
        int max = arr[0][0];

        for(int i=0;i<arr.length;i++) {
            for(int j=0;j<arr.length;j++) {
                if(arr[i][j]>max) {
                    max=arr[i][j];
                }
            }
        }

        System.out.println(max);
    }
}

答案1

得分: 6

问题出在这里:

for(int j=0;j<arr.length;j++)

实际上你应该循环遍历内部数组的长度,而不是外部数组的长度。应该是这样的:

for(int j=0;j<arr[i].length;j++)

编辑: 这里的一个关键信息是你有一个数组的数组。你的“外部”数组有3个项目,每个项目本身都是一个整数数组。为了帮助理解这一点,尝试运行以下代码:

public class maximumNumber {
    public static void main(String[] args) {
        int arr[][] = {{11,21,31,32,33},{41,51,61,62,63},{71,81,91,92,93}};
        int max = arr[0][0];

        for(int i=0;i<arr.length;i++) {
            int[] innerArray = arr[i];

            System.out.println("------------- 开始数组 " + i + " -------------");

            for(int j=0; j< innerArray.length; j++) {
                System.out.println(innerArray[j]);

                if(arr[i][j]>max) {
                    max=arr[i][j];
                }
            }

            System.out.println("------------- 数组 " + i + " 结束 -------------");
        }

        System.out.println(max);
    }
}

这是输出结果:

------------- 开始数组 0 -------------
11
21
31
32
33
------------- 数组 0 结束 -------------
------------- 开始数组 1 -------------
41
51
61
62
63
------------- 数组 1 结束 -------------
------------- 开始数组 2 -------------
71
81
91
92
93
------------- 数组 2 结束 -------------
93
英文:

The problem is here:

for(int j=0;j<arr.length;j++)

You should actually be looping over the length of the inner array, not of the outer array. This should actually be

for(int j=0;j<arr[i].length;j++)

Edit: A key piece of information here is that you have an array of arrays. Your "outer" array has 3 items, each of which is itself an array of integers. To help understand this, try running the following code:

public class maximumNumber {
    public static void main(String[] args) {
        int arr[][] = {{11,21,31,32,33},{41,51,61,62,63},{71,81,91,92,93}};
        int max = arr[0][0];

        for(int i=0;i<arr.length;i++) {
            int[] innerArray = arr[i];
            
            System.out.println("------------------ Begin array " + i + " -----------");
            
            for(int j=0; j< innerArray.length; j++) {
                System.out.println(innerArray[j]);
                
                if(arr[i][j]>max) {
                    max=arr[i][j];
                }
            }
            
            System.out.println("------- End of array " + i + " --------");
        }

        System.out.println(max);
    }
}

Here's the output:

------------------ Begin array 0 -----------
11
21
31
32
33
------- End of array 0--------
------------------ Begin array 1 -----------
41
51
61
62
63
------- End of array 1--------
------------------ Begin array 2 -----------
71
81
91
92
93
------- End of array 2 --------
93

答案2

得分: 5

在第二个循环中,您需要使用 arr[i].length

  int arr[][] = {{11,21,31,32,33},{41,51,61,62,63},{71,81,91,92,93}};
    
  int max = arr[0][0];
                
  for(int i=0;i<arr.length;i++){
      for(int j=0;j<arr[i].length;j++){
          if(arr[i][j]>=max){max=arr[i][j];}
      }
  }
英文:

In second loop u need to use arr[i].length

  int arr[][] = {{11,21,31,32,33},{41,51,61,62,63},{71,81,91,92,93}};
    
  int max = arr[0][0];
                
   for(int i=0;i&lt;arr.length;i++){
          for(int j=0;j&lt;arr[i].length;j++){
                if(arr[i][j]&gt;=max){max=arr[i][j];}
           }
     }

答案3

得分: 5

你的条件 j&lt;arr.length 是错误的。 arr.length 是3,但你需要让 j 保持在5之前,即你的子数组的长度。

应该是 j &lt; arr[i].length

英文:

Your condition j&lt;arr.length is wrong. arr.length is 3, but you need j to continue until 5, the length of your subarrays.

Should be j &lt; arr[i].length.

答案4

得分: 1

在第二个循环中使用 for (int j = 0; j < arr[i].length; j++) {,这将使你遍历所有元素。

英文:

In the second loop use for (int j = 0; j &lt; arr[i].length; j++) {, this will give you full element loop.

答案5

得分: 0

从Java 8开始,您可以使用流来实现此操作。

例如:intStream.max(Integer::compare)

但是您需要首先将数据展平。

import java.util.Arrays;
import java.util.stream.Stream;

public class Flatten {
    public static void main(String[] args) {
        int arr[][] = {
            { 11, 21, 31, 32, 33 },
            { 41, 51, 61, 62, 63 },
            { 71, 81, 91, 92, 93 }
        };
        System.out.printf("最大值: %d", max(arr));
    }

    private static int max(int[][] matrix) {
        return flatten(matrix).max(Integer::compare).get().intValue();
    }

    private static Stream<Integer> flatten(int[][] matrix) {
        return Arrays.asList(matrix).stream()
            .map(row -> Arrays.stream(row)).flatMap(a -> a.boxed());
    }
}
英文:

Starting with Java 8, you can use streams to do this.

e.g. intStream.max(Integer::compare)

But you will need to flatten the data first.

import java.util.Arrays;
import java.util.stream.Stream;

public class Flatten {
    public static void main(String[] args) {
        int arr[][] = {
            { 11, 21, 31, 32, 33 },
            { 41, 51, 61, 62, 63 },
            { 71, 81, 91, 92, 93 }
        };
        System.out.printf(&quot;Max: %d&quot;, max(arr));
    }

    private static int max(int[][] matrix) {
        return flatten(matrix).max(Integer::compare).get().intValue();
    }

    private static Stream&lt;Integer&gt; flatten(int[][] matrix) {
        return Arrays.asList(matrix).stream()
            .map(row -&gt;  Arrays.stream(row)).flatMap(a -&gt; a.boxed());
    }
}

huangapple
  • 本文由 发表于 2020年4月8日 02:39:28
  • 转载请务必保留本文链接:https://go.coder-hub.com/61087082.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定