英文:
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<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
if(arr[i][j]>=max){max=arr[i][j];}
}
}
答案3
得分: 5
你的条件 j<arr.length
是错误的。 arr.length
是3,但你需要让 j
保持在5之前,即你的子数组的长度。
应该是 j < arr[i].length
。
英文:
Your condition j<arr.length
is wrong. arr.length
is 3, but you need j
to continue until 5, the length of your subarrays.
Should be j < arr[i].length
.
答案4
得分: 1
在第二个循环中使用 for (int j = 0; j < arr[i].length; j++) {
,这将使你遍历所有元素。
英文:
In the second loop use for (int j = 0; j < 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("Max: %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());
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论