Мин и макс работают неправильно при использовании однозначных младших цифр - PullRequest
1 голос
/ 26 апреля 2019

Я настраиваю свой массив из пользовательского ввода, а затем пытаюсь найти минимальное и максимальное значения. Но, похоже, он работает идеально только для поиска максимального значения, а не минимального значения.

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

Ответы [ 3 ]

4 голосов
/ 26 апреля 2019

Проблема в том, что вы устанавливаете smallest только тогда, когда вы не нашли новый самый большой элемент при обходе массива элементов.Поэтому вместо else измените его на другой оператор if, чтобы увидеть, меньше ли элемент, по которому вы выполняете итерацию, меньше, чем ваш текущий наименьший элемент, например:

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

Кроме того, вы инициализируете smallest и largest к первому элементу в items, который по умолчанию будет равен 0, поскольку массив элементов в этой точке пуст.Попробуйте инициализировать largest наименьшей возможной оценкой, а smallest - наименьшей возможной оценкой, например, так (в настоящее время используются минимальное и максимальное целочисленные значения),

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

Причина в том, что выникогда не найдете оценку ниже 0, и поскольку это то, что у вас было раньше, наименьшая оценка всегда была бы 0.

0 голосов
/ 26 апреля 2019

Я здесь только для альтернативы версии.И способ, которым это работает, сортирует массив (от наименьшего к наибольшему), а затем просто получает наименьшее, как наименьшее, и наибольшее, как наибольшее число.

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();
  }
}
0 голосов
/ 26 апреля 2019
if (largest < items[i])
largest = items[i]
else if (smallest > items[i])
smallest = items[i]

Также первое значение наименьшего должно быть одним из элементов, так как ни один из классов не может быть меньше, чем 0

Это должно работать, я надеюсь, что вы понимаете

...