java - 使用单个低位数字时,最小值和最大值不能正常工作

标签 java arrays max min

我正在根据用户输入设置我的数组,然后尝试找到最小值和最大值。但它似乎只能完美地找到最大值而不是最小值。

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];
} 

此外,您正在将 smallestlargest 初始化为 items 中的第一个元素,由于 items 数组为空,因此默认为 0在那时候。尝试将 largest 初始化为尽可能小的等级,将 smallest 初始化为尽可能大的等级(当前使用最小和最大整数值),

int largest=Integer.MIN_VALUE,smallest=INTEGER.MAX_VALUE;

这样做的原因是您永远不会找到小于 0 的成绩,因为这是您以前的成绩,所以最小的成绩总是 0。

关于java - 使用单个低位数字时,最小值和最大值不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55860046/

相关文章:

javascript 在数组中的对象之间保留某些属性

php - Laravel 函数之间传递变量

java - 从 Android 中调用 Firebase Cloud Function 接收数据

java - PHP/Java for Android 之间的数据编码/解码

java - 一种返回 boolean 值的方法,该 boolean 值标识 2 个数组的值是否相同

sql - 返回每组一列最大值的行

c# - Linq GroupBy Max 并添加列

powershell - Get-Childitem解决方法

java - 在当前鼠标位置检测图像仅适用于部分图像

java - 无法解析太多方法