我运行了这段代码,一切都找到了。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);
Run Code Online (Sandbox Code Playgroud)
day[0]在为它分配任何值之前,请先阅读。
你的代码
int[] day = new int[x];
int minValue = day[0];
int maxValue = day[0];
Run Code Online (Sandbox Code Playgroud)
相当于
int[] day = new int[x];
int minValue = 0;
int maxValue = 0;
Run Code Online (Sandbox Code Playgroud)
请参阅https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.12.5:
每个...数组组件在创建时都会使用默认值进行初始化。
对于 int 类型,默认值为零,即 0。
您的代码仅在偶然情况下才有效:) 尝试仅在输入中max输入负值,您也将仅给出.max0
强烈建议将计算部分与输入/输出分开。Java 不能轻易地从一个方法返回两个值。您可以分别实现两个单独的方法 formax和min,或者您可以在临时创建的 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));
Run Code Online (Sandbox Code Playgroud)
计算部分(查看 for-each 循环https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html):
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));
Run Code Online (Sandbox Code Playgroud)
与此类似maxValue(),您现在可以轻松地自己完成。
您的程序仍然需要一些错误处理,例如当用户提供不一致的输入时。
您应该养成从编程载体一开始就将程序的计算部分和表示部分分开的习惯:)您将生成更好的可维护程序,并且您还将更快地发现错误。