在 Java 二维数组中查找最小值和最大值
Finding minimum and maximum in Java 2D array
我已经尝试解决这个问题一段时间了,需要一些帮助。我需要找到 min/max 值并将它们打印出来用于多维数组。这是我尝试过的两种方法。
import java.util.*;
class MinMax {
public static void main(String[] args) {
int[][] data = {{3, 2, 5},
{1, 4, 4, 8, 13},
{9, 1, 0, 2},
{0, 2, 6, 3, -1, -8}};
Arrays.sort(data);
System.out.println("Minimum = " + data[0]);
System.out.println("Maximum = " + data[data.length - 1]);
}
}
此版本符合但不符合 运行。
import java.util.*;
class MinMax {
public static void main(String[] args) {
int[][] data = {{3, 2, 5},
{1, 4, 4, 8, 13},
{9, 1, 0, 2},
{0, 2, 6, 3, -1, -8}};
public static int getMaxValue(int[] numbers) {
int maxValue = numbers[0];
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] > maxValue) {
maxValue = numbers[i];
}
return maxValue;
{
public static int getMinValue (int[] numbers) {
int minValue = numbers[0];
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] < minValue) {
minValue = numbers[i];
}
}
return minValue;
}
这个版本在编译时给我带来了一堆错误。非常感谢任何帮助。
好的,我已经修复了您的代码。实际上你的错误是你没有遍历多维数组的所有单元格。
因此,我在 getMinValue/getMinValue 方法中添加了额外的循环并修复了数组元素寻址。
import java.util.*;
class MinMax {
public static void main(String[] args) {
int[][] data = {
{3, 2, 5},
{1, 4, 4, 8, 13},
{9, 1, 0, 2},
{0, 2, 6, 3, -1, -8}
};
System.out.println(getMaxValue(data));
System.out.println(getMinValue(data));
}
public static int getMaxValue(int[][] numbers) {
int maxValue = numbers[0][0];
for (int j = 0; j < numbers.length; j++) {
for (int i = 0; i < numbers[j].length; i++) {
if (numbers[j][i] > maxValue) {
maxValue = numbers[j][i];
}
}
}
return maxValue;
}
public static int getMinValue(int[][] numbers) {
int minValue = numbers[0][0];
for (int j = 0; j < numbers.length; j++) {
for (int i = 0; i < numbers[j].length; i++) {
if (numbers[j][i] < minValue ) {
minValue = numbers[j][i];
}
}
}
return minValue ;
}
}
我有一个更有趣的解决方案,使用 Java 8 :)
IntSummaryStatistics stats = Arrays.stream(data).flatMapToInt(Arrays::stream).collect(Collectors.summarizingInt(Integer::intValue));
int max = stats.getMax();
int min = stats.getMin();
显然,这与您的解决方案不同。但它做同样的事情。首先,我们将二维数组转换为 Stream
of int
s。为了首先做到这一点,我们需要调用 flatMapToInt
。我们这样做是为了以一种扁平的方式流式传输数组中的所有元素。想象一下,如果我们只是开始使用单个索引来遍历整个二维数组。是这样的。一旦我们将数组转换为流,我们将使用 IntSummaryStatistics 以便为最小值和最大值重用相同的流。
您的问题是:您正在对 int
个数组进行排序,而不是对每个 int
个数组中的每个 int
进行排序。
要解决这个问题:循环遍历 int
个数组中的每个 int
个数组。
说明 使用 Arrays.sort()
:
查找二维 int
数组的最大值和最小值
- 声明一个 2D
int
数组进行排序,称为 data
。
- 声明两个
int
,一个保存最大值,另一个保存最小值。
- 最大值的初始值应为
Integer.MIN_VALUE
,最小值的初始值应为 Integer.MAX_VALUE
,以确保处理负值。
- 从
0
到 data.length
遍历 data
:
- 排序
data[i]
- 检查
data[i]
的第一个值是否小于最小值,如果是则更改它。
- 检查
data[i]
的最后一个值是否大于最大值,如果是则更改它。
- 输出你的结果。
示例:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[][] data = {{3, 2, 5},
{1, 4, 4, 8, 13},
{9, 1, 0, 2},
{0, 2, 6, 3, -1, -8} };
int maximum = Integer.MIN_VALUE;
int minimum = Integer.MAX_VALUE;
for(int i = 0; i < data.length; i++) {
Arrays.sort(data[i]);
if(data[i][0] < minimum) minimum = data[i][0];
if(data[i][data[i].length - 1] > maximum) maximum = data[i][data[i].length - 1];
}
System.out.println("Minimum = " + maximum);
System.out.println("Maximum = " + minimum);
}
}
package array;
public class Max_number {
// 2 5 7 9
// 3 6 8 1
public static void main (String[] arg) {
int a[][] = {{2,5,7,9},{3,6,8,1}};
int max=a[0][0];
for (int i=0; i<2; i++) //row
{
for (int j=0; j<4; j++) //coloum
{
if(a[i][j]>max)
{
max=a[i][j];
}
}
}
System.out.println("maximum number is"+max);
}
}
我已经尝试解决这个问题一段时间了,需要一些帮助。我需要找到 min/max 值并将它们打印出来用于多维数组。这是我尝试过的两种方法。
import java.util.*;
class MinMax {
public static void main(String[] args) {
int[][] data = {{3, 2, 5},
{1, 4, 4, 8, 13},
{9, 1, 0, 2},
{0, 2, 6, 3, -1, -8}};
Arrays.sort(data);
System.out.println("Minimum = " + data[0]);
System.out.println("Maximum = " + data[data.length - 1]);
}
}
此版本符合但不符合 运行。
import java.util.*;
class MinMax {
public static void main(String[] args) {
int[][] data = {{3, 2, 5},
{1, 4, 4, 8, 13},
{9, 1, 0, 2},
{0, 2, 6, 3, -1, -8}};
public static int getMaxValue(int[] numbers) {
int maxValue = numbers[0];
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] > maxValue) {
maxValue = numbers[i];
}
return maxValue;
{
public static int getMinValue (int[] numbers) {
int minValue = numbers[0];
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] < minValue) {
minValue = numbers[i];
}
}
return minValue;
}
这个版本在编译时给我带来了一堆错误。非常感谢任何帮助。
好的,我已经修复了您的代码。实际上你的错误是你没有遍历多维数组的所有单元格。
因此,我在 getMinValue/getMinValue 方法中添加了额外的循环并修复了数组元素寻址。
import java.util.*;
class MinMax {
public static void main(String[] args) {
int[][] data = {
{3, 2, 5},
{1, 4, 4, 8, 13},
{9, 1, 0, 2},
{0, 2, 6, 3, -1, -8}
};
System.out.println(getMaxValue(data));
System.out.println(getMinValue(data));
}
public static int getMaxValue(int[][] numbers) {
int maxValue = numbers[0][0];
for (int j = 0; j < numbers.length; j++) {
for (int i = 0; i < numbers[j].length; i++) {
if (numbers[j][i] > maxValue) {
maxValue = numbers[j][i];
}
}
}
return maxValue;
}
public static int getMinValue(int[][] numbers) {
int minValue = numbers[0][0];
for (int j = 0; j < numbers.length; j++) {
for (int i = 0; i < numbers[j].length; i++) {
if (numbers[j][i] < minValue ) {
minValue = numbers[j][i];
}
}
}
return minValue ;
}
}
我有一个更有趣的解决方案,使用 Java 8 :)
IntSummaryStatistics stats = Arrays.stream(data).flatMapToInt(Arrays::stream).collect(Collectors.summarizingInt(Integer::intValue));
int max = stats.getMax();
int min = stats.getMin();
显然,这与您的解决方案不同。但它做同样的事情。首先,我们将二维数组转换为 Stream
of int
s。为了首先做到这一点,我们需要调用 flatMapToInt
。我们这样做是为了以一种扁平的方式流式传输数组中的所有元素。想象一下,如果我们只是开始使用单个索引来遍历整个二维数组。是这样的。一旦我们将数组转换为流,我们将使用 IntSummaryStatistics 以便为最小值和最大值重用相同的流。
您的问题是:您正在对 int
个数组进行排序,而不是对每个 int
个数组中的每个 int
进行排序。
要解决这个问题:循环遍历 int
个数组中的每个 int
个数组。
说明 使用 Arrays.sort()
:
int
数组的最大值和最小值
- 声明一个 2D
int
数组进行排序,称为data
。 - 声明两个
int
,一个保存最大值,另一个保存最小值。- 最大值的初始值应为
Integer.MIN_VALUE
,最小值的初始值应为Integer.MAX_VALUE
,以确保处理负值。
- 最大值的初始值应为
- 从
0
到data.length
遍历data
:- 排序
data[i]
- 检查
data[i]
的第一个值是否小于最小值,如果是则更改它。 - 检查
data[i]
的最后一个值是否大于最大值,如果是则更改它。
- 排序
- 输出你的结果。
示例:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[][] data = {{3, 2, 5},
{1, 4, 4, 8, 13},
{9, 1, 0, 2},
{0, 2, 6, 3, -1, -8} };
int maximum = Integer.MIN_VALUE;
int minimum = Integer.MAX_VALUE;
for(int i = 0; i < data.length; i++) {
Arrays.sort(data[i]);
if(data[i][0] < minimum) minimum = data[i][0];
if(data[i][data[i].length - 1] > maximum) maximum = data[i][data[i].length - 1];
}
System.out.println("Minimum = " + maximum);
System.out.println("Maximum = " + minimum);
}
}
package array;
public class Max_number {
// 2 5 7 9
// 3 6 8 1
public static void main (String[] arg) {
int a[][] = {{2,5,7,9},{3,6,8,1}};
int max=a[0][0];
for (int i=0; i<2; i++) //row
{
for (int j=0; j<4; j++) //coloum
{
if(a[i][j]>max)
{
max=a[i][j];
}
}
}
System.out.println("maximum number is"+max);
}
}