Обработка за пределами фиксированного массива

1

Моя проблема заключается в том, что, например, есть только три проходящих класса, пользователь passGrade тогда размер массива passGrade было бы всего три, то же самое с failGrade: если бы пользователь ввел два неудачных класса, тогда размер массива failGrade бы всего двумя, короче Я хочу, чтобы два массива имели фиксированную длину. В моей программе это выходит за рамки.

Вот фрагмент кода, который я имею в виду:

Scanner input=new Scanner(System.in);
int gradeSize=0;
int fixedPassed=0;
int fixedFail=0;
int grades[]=new int[gradeSize];
int passGrade[]=new int[fixedPassed];
int failGrade[]=new int[fixedFail];

System.out.print("Enter Grade Size: ");
gradeSize=input.nextInt();

System.out.println();
System.out.print("Enter Grades: ");
for(int i=0; i<gradeSize; i++)
{
    grades[i]=input.nextInt();
    while(grades[i]<1 || grades[i]>100)
    {
        grades[i]=input.nextInt();
    }
    if(grades[i]>=75)
    { 
        fixedPassed++;
        passGrade[i]=grades[i];

    }
    else if(grades[i]<75)
    {
        fixedFail++;
        failGrade[i]=grades[i];

    }
}
for(int i=0; i<fixedPassed; i++)
{
    System.out.print(passGrade[i]+" ");
}

for(int i=0; i<fixedFail; i++)
{
    System.out.print(failGrade[i]+" ");
}
  • 0
    используя passGrade[i]=grades[i]; если размер grades[] больше, чем passGrade[] то, конечно, это не удастся. Также массивы инициализируются нулями, поэтому они будут пустыми. если вы хотите пусто, попробуйте использовать ArrayList и добавьте к этому.
  • 3
    Массивы всегда имеют фиксированный размер.
Теги:
arrays

2 ответа

0
Лучший ответ

Массивы Java являются фиксированными. Поэтому вам нужно получить вход, затем подсчитать пропуск/не удалось. Затем создайте свои массивы с ошибками прохода, а затем скопируйте их в них. Вы могли бы сделать что-то подобное,

System.out.print("Enter Grade Size: ");
int gradeSize = input.nextInt();

int passCount = 0;
int grades[]=new int[gradeSize];
System.out.println();
System.out.print("Enter Grades: ");
for (int i = 0; i < gradeSize; i++) {
  grades[i] = input.nextInt();
  if(grades[i] >= 75) { 
    passCount++;
  }
}
int passGrade[] = new int[passCount];
int failGrade[] = new int[grades.length - passCount];
int failCount = passCount = 0;
for (int grade : grades) {
  if (grade >= 75) { 
    passGrade[passCount++] = grade;
  } else {
    failGrade[failCount++] = grade;
  }
}
System.out.println("Passing Grades: " + Arrays.toString(passGrade));
System.out.println("Failing Grades: " + Arrays.toString(failGrade));
  • 1
    Неизменное может быть слишком сильным словом для массивов. Для размера массива, конечно.
0

Поскольку вы заранее не знаете длину ввода, и заранее не знаете, сколько прошло и сколько провалилось, вы не можете создавать массивы перед первой обработкой ввода.

Вы должны использовать 3 коллекции (HashSet, ArrayList и т.д.) Для хранения входных оценок, пройденных оценок и неудачных оценок. Как только вы закончите, вы можете инициализировать свои 3 массива на основе размера() коллекций, а затем перебирать коллекции, чтобы скопировать их содержимое в массивы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню