Исключая целое число из массива, чтобы найти 2-й самый маленький - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть задание, где мой проф. введет неопределенное число целых чисел в мою программу, и моя программа обработает данные соответственно , чтобы присвоить оценку каждому значению и найти самое высокое и самое низкое значение , однако он всегда помещает -1 в конец данных, так что когда input<0 перестанет запрашивать ввод.
Проблема в том, что моя программа не должна обрабатывать -1. Он не добавляется в качестве оценки, но входит в список оценок, поэтому самое низкое значение всегда -1.
Я пытался написать код, который удалял бы -1 из моего массива при обнаружении как часть логики для оценки оценки, но все, что я пробовал, только возвращает ошибки.
Как я могу игнорировать -1 и найти следующее наименьшее значение или удалить -1 из списка перед оценкой?

import java.util.*;
public class Hw5{
 public static void main(String[] args){
  Scanner console = new Scanner(System.in);
  int input = console.nextInt();
  ArrayList<Integer> GradeList = new ArrayList<>();

  while(input >= 0){
   input = console.nextInt();
   GradeList.add(input);
  }
  evaluateGrade(GradeList);
  System.out.print(GradeList);
}


 public static void evaluateGrade(List<Integer> Scores){ 
  int count = Scores.size();
  int high = Collections.max(Scores);
  int low = Collections.min(Scores);
  int Aplus = 0;
  int A = 0;
  int Amin = 0;
  int Bplus = 0;
  int B = 0;
  int Bmin = 0;
  int Cplus = 0;
  int C = 0;
  int Cmin = 0;
  int Dplus = 0;
  int D = 0;
  int Dmin = 0;
  int F = 0;

for(int i : Scores){
  if(i > 97){
    Aplus += 1;
  }
  else if(i >= 93 && i <= 96){
    A += 1;
  }
  else if(i >= 89 && i <= 92){
    Amin += 1;
  }
  else if(i >= 85 && i <= 88){
    Bplus += 1;
  }
  else if(i >= 81 && i <= 84){
    B += 1;
  }
  else if(i >= 77 && i <= 80){
    Bmin += 1;
  }
  else if(i >= 81 && i <= 84){
    B += 1;
  }
  else if(i >= 77 && i <= 80){
     Bmin += 1;
  }
  else if(i >= 76 && i <= 73){
    Cplus += 1;
  }
  else if(i >= 69 && i <= 72){
    C += 1;
  }
  else if(i >= 65 && i <= 68){
    Cmin += 1;
  }
  else if(i >= 61 && i <= 64){
    Dplus += 1;
  }
  else if(i >= 57 && i <= 60){
    D += 1;
  }
  else if(i >= 53 && i <= 56){
    Dmin += 1;
  }
  else if(i >= 52 && i <= 0){
    F += 1;
  }
}

System.out.printf("Total number of grades = %d", count);
System.out.println();
System.out.printf("Number of A+'s = %d", Aplus);
System.out.println();
System.out.printf("Number of A's  = %d", A);
System.out.println();
System.out.printf("Number of A-'s = %d", Amin);
System.out.println();
System.out.printf("Number of B+'s = %d", Bplus);
System.out.println();
System.out.printf("Number of B's  = %d", B);
System.out.println();
System.out.printf("Number of B-'s = %d", Bmin);
System.out.println();
System.out.printf("Number of C+'s = %d", Cplus);
System.out.println();
System.out.printf("Number of C's  = %d", C);
System.out.println();
System.out.printf("Number of C-'s = %d", Cmin);
System.out.println();
System.out.printf("Number of D+'s = %d", Dplus);
System.out.println();
System.out.printf("Number of D's  = %d", D);
System.out.println();
System.out.printf("Number of D+'s = %d", Dmin);
System.out.println();
System.out.printf("Number of F's  = %d", F);
System.out.println();
System.out.printf("The highest grade = %d", high);
System.out.println();
System.out.printf("The lowest grade = %d", low);
System.out.println();
}

1 Ответ

0 голосов
/ 19 ноября 2018

Измените это

int input = console.nextInt();
ArrayList<Integer> GradeList = new ArrayList<>();

while(input >= 0){
   input = console.nextInt();
   GradeList.add(input);
}

На что-то вроде

List<Integer> gradeList = new ArrayList<>();
int input;

while ((input = console.nextInt()) >= 0) {
    gradeList.add(input);
}

Какие программы для интерфейса List следуют идиоматическому соглашению Java о назначении и оценке и соблюдают стандартные соглашения об именах переменных.

...