我从用户输入设置我的数组,然后尝试找到最小值和最大值。但它似乎只能找到最大而不是最小值。
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
中的第一个元素,该元素将默认为0,因为items数组在此时为空。尝试将largest
初始化为尽可能小的等级,并将smallest
初始化为最大可能等级,如此(目前使用最小和最大整数值),
int largest=Integer.MIN_VALUE,smallest=INTEGER.MAX_VALUE;
这样做的原因是你永远不会找到小于0的等级,因为那是你以前的,最小的等级一直是0。
我只是在这里替代版本。它的工作方式是对数组进行排序(从最低到最高),然后将最低值作为最小值,最高值作为最大值。
import java.util.Arrays;
import java.util.Scanner;
public class GradeBookKeeper
{
public static void main(String[] arg)
{
Scanner scan= new Scanner(System.in);
int[] items;
double sum=0;
int numItems,largest,smallest;
System.out.print("Enter the number of students: ");
numItems=scan.nextInt();
items=new int [numItems];
largest=smallest=items[0];
for(int i=0;i<items.length;i++)
{
System.out.print("Enter the grade for student "+(i+1)+": ");
items[i] = scan.nextInt();
sum+=items[i];
}
for (int i = 0; i < items.length; i++) {
Arrays.sort(items);
largest=items[items.length-1];
smallest=items[0];
}
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();
}
}
if (largest < items[i])
largest = items[i]
else if (smallest > items[i])
smallest = items[i]
最小的第一个值应该是其中一个项目,因为任何等级都不能小于0
这应该工作,我希望你明白