【问题标题】:Minimum and maximum value最小值和最大值
【发布时间】:2023-04-02 07:32:01
【问题描述】:

我运行了这段代码,一切都找到了。 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);

【问题讨论】:

    标签: java max minimum


    【解决方案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(),您现在可以轻松地自己完成。

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

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

    【讨论】:

    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 2012-09-16
    • 2016-04-10
    • 2019-01-09
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多