Fan*_*ale 2 java arrays loops max min
我一直在努力解决这个问题,需要一些帮助。我需要找到最小/最大值并将它们打印出来用于多维数组。这是我尝试过的两种方法。
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]);
}
}
Run Code Online (Sandbox Code Playgroud)
此版本符合但不运行。
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;
}
Run Code Online (Sandbox Code Playgroud)
这个版本只是在编译时给我带来了一堆错误。任何帮助是极大的赞赏。
我有一个使用 Java 8 的更有趣的解决方案:)
IntSummaryStatistics stats = Arrays.stream(data).flatMapToInt(Arrays::stream).collect(Collectors.summarizingInt(Integer::intValue));
int max = stats.getMax();
int min = stats.getMin();
Run Code Online (Sandbox Code Playgroud)
显然,这与您的解决方案不同。但它做同样的事情。首先,我们将二维数组转换为 a Streamof ints。为了做到这一点,我们首先需要调用flatMapToInt. 我们这样做是为了以扁平的方式流式传输数组中的所有元素。想象一下,如果我们开始使用单个索引来迭代整个二维数组。就是这样的。将数组转换为流后,我们将使用 IntSummaryStatistics 以便为最小值和最大值重用同一流。
好的,我已经修复了你的代码。实际上你的错误是你没有遍历多维数组的所有单元格。
因此,我在 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 ;
}
}
Run Code Online (Sandbox Code Playgroud)