繁体   English   中英

最小值和最大值

[英]Minimum and maximum value

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

为什么它不起作用

在为它分配任何值之前,您先阅读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 :) 尝试在输入中输入负值,您的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() ,您现在可以轻松地自己完成。

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

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

你可以这样做。

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);
    

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM