我正在根据用户输入设置我的数组,然后尝试找到最小值和最大值。但它似乎只能完美地找到最大值而不是最小值。
import java.util.Scanner;
public class GradeBookKeeper
{
public static void main(String arg[])
{
int numItems;
int[] items;
double sum=0;
Scanner scan= new Scanner(System.in);
System.out.println("Enter the number of students: ");
numItems=scan.nextInt();
items=new int [numItems];
int largest=items[0],smallest=items[0];
for (int i = 0 ; i < items.length; i++ )
{
System.out.println("Enter the grade for student "+(i+1)+":");
items[i] = scan.nextInt();
sum = sum + items[i];
if(largest < items[i])
{
largest = items[i];
}
else
{
smallest = items[i];
}
}
System.out.printf("The average is "+"%.2f\n",sum/items.length);
System.out.println("The minimum is: "+smallest);
System.out.println("The maximum is: "+largest);
scan.close();
}
}
//输出
输入学生人数: 4
输入学生 1 的成绩:
2
输入学生 2 的成绩:
1
输入学生 3 的成绩:
2
输入学生 4 的成绩:
3
平均值为2.00
最小为:2
最大值为:3
最佳答案
问题是,当您在遍历 items 数组时没有找到新的最大元素时,您只设置了 smallest
。因此,不要使用 else
,而是将其更改为另一个 if 语句,以查看您正在迭代的项目是否小于当前的最小项目,如下所示,
if(largest < items[i])
{
largest = items[i];
}
if(smallest > items[i])
{
smallest = items[i];
}
此外,您正在将 smallest
和 largest
初始化为 items
中的第一个元素,由于 items 数组为空,因此默认为 0在那时候。尝试将 largest
初始化为尽可能小的等级,将 smallest
初始化为尽可能大的等级(当前使用最小和最大整数值),
int largest=Integer.MIN_VALUE,smallest=INTEGER.MAX_VALUE;
这样做的原因是您永远不会找到小于 0 的成绩,因为这是您以前的成绩,所以最小的成绩总是 0。
关于java - 使用单个低位数字时,最小值和最大值不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55860046/