Моя проблема заключается в том, что, например, есть только три проходящих класса, пользователь 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]+" ");
}
Массивы 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));
Поскольку вы заранее не знаете длину ввода, и заранее не знаете, сколько прошло и сколько провалилось, вы не можете создавать массивы перед первой обработкой ввода.
Вы должны использовать 3 коллекции (HashSet, ArrayList и т.д.) Для хранения входных оценок, пройденных оценок и неудачных оценок. Как только вы закончите, вы можете инициализировать свои 3 массива на основе размера() коллекций, а затем перебирать коллекции, чтобы скопировать их содержимое в массивы.
passGrade[i]=grades[i];
если размерgrades[]
больше, чемpassGrade[]
то, конечно, это не удастся. Также массивы инициализируются нулями, поэтому они будут пустыми. если вы хотите пусто, попробуйте использоватьArrayList
и добавьте к этому.