使用单个低位数时,最小值和最大值无法正常工作

问题描述 投票:1回答:3

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

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

java arrays max min
3个回答
4
投票

问题是,只有在遍历items数组时没有找到新的最大元素时,才设置smallest。因此,而不是else,将其更改为另一个if语句,以查看您正在迭代的项目是否小于您当前的最小项目,如此

if(largest < items[i])
{
    largest = items[i];
} 
if(smallest > items[i])
{
    smallest = items[i];
} 

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

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

这样做的原因是你永远不会找到小于0的等级,因为那是你以前的,最小的等级一直是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();
  }
}

-1
投票
if (largest < items[i])
largest = items[i]
else if (smallest > items[i])
smallest = items[i]

最小的第一个值应该是其中一个项目,因为任何等级都不能小于0

这应该工作,我希望你明白

© www.soinside.com 2019 - 2024. All rights reserved.