最小值和最大值

Posted

技术标签:

【中文标题】最小值和最大值【英文标题】:Minimum and maximum value 【发布时间】:2021-12-05 16:42:17 【问题描述】:

我运行了这段代码,一切都找到了。 maximumValue 显示正确的输出,但是,minValue 始终显示 0 作为输出。

Scanner sc = new Scanner(System.in);

int x= sc.nextInt();

int[] day =  new int[x];

int minValue = day[0]; 
int maxValue = day[0];

for (int i = 0; i < x; i++) 
    day[i] = sc.nextInt();

    if (day[i] < minValue) minValue = day[i];
    if (day[i] > maxValue) maxValue = day[i];


System.out.println(minValue);
System.out.println(maxValue);

【问题讨论】:

【参考方案1】:

为什么它不起作用

您在分配任何值之前阅读day[0]

你的代码

int[] day =  new int[x];                                 
int minValue = day[0]; 
int maxValue = day[0];

等价于

int[] day =  new int[x];                                 
int minValue = 0; 
int maxValue = 0;

见https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.12.5:

每个 ... 数组组件在创建时都会使用默认值进行初始化。

对于int类型,默认值为0,即0。

您的代码仅适用于 max 是偶然的 :) 尝试在输入中输入 only 负 值,您的 max 也只会给出 0

如何解决

强烈建议将计算部分与输入/输出分开。 Java 不能轻易地从一个方法返回两个值。您可以分别为maxmin 实现两个单独的方法,或者您可以在临时创建的 Tuple 对象中返回这两个值。

输入/输出部分:

final Scanner sc = new Scanner(System.in);

final int numberOfValues = sc.nextInt();
final int[] values =  new int[numberOfValues];
for (int i = 0; i < numberOfValues; i++) 
    values[i] = sc.nextInt();


System.out.println(minValue(values));
System.out.println(maxValue(values));

还有计算部分(看for-each循环https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html):

public int minValue(int[] array) 
    int min = Integer.MAX_VALUE;
    for (int value : array) 
        if (value < min) 
            min = value;
        
    

类似maxValue(),您现在可以轻松地自己完成。

您的程序仍然需要一些错误处理,例如当用户提供不一致的输入时。

您应该养成从编程载体一开始就将程序的计算部分和表示部分分开的习惯:) 您将生成更好的可维护程序,并且您也会更快地发现错误。

【讨论】:

另外,您可以int minValue = Integer.MAX_VALUE修复代码行为 @Gunther ...和int maxValue = Integer.MIN_VALUE :)【参考方案2】:

你可以这样做。

Scanner sc = new Scanner(System.in);

int x= sc.nextInt();
int[] day =  new int[x];

for (int i = 0; i < x; i++) 
    day[i] = sc.nextInt();

int minValue = day[0]; 
int maxValue = day[0];

for (int i = 0; i < x; i++) 
    if (day[i] < minValue) minValue = day[i];
    if (day[i] > maxValue) maxValue = day[i];


System.out.println(minValue);
System.out.println(maxValue);
    

【讨论】:

哇哇哇谢谢大家eeeeee

以上是关于最小值和最大值的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 跨行的最小值和最大值

优化查询以确定一个值在最小值和最大值之间

在给定数组中查找最小值和最大值,其中约束应最小值索引应小于其最大值

如何检索时间序列数据的最小值和最大值

如何缩小具有已知最小值和最大值的数字范围

查找每行的最小值和最大值,不包括 NaN 值