Написание метода для добавления объекта в массив - PullRequest
0 голосов
/ 25 февраля 2019

Я написал метод для добавления объекта Student в массив.

void add(Student newStudent){
    int i = 0;
    while(i != classSize){    //classSize is the size of the roster array
        if(roster[i] == null {   //roster is an array of Student objects
            roster[i] = newStudent;
        }
        i++;
    }
}

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

Часть моего основного метода:

ClassRoster firstRoster = new ClassRoster();
scan = new Scanner(inputFile).useDelimiter(",|\\n");
while(scan.hasNext()){
    String name = scan.next();
    int gradeLevel = scan.nextInt();
    int testGrade = scan.nextInt();
    Student newStudent = new Student(name,gradeLevel,testGrade);
    firstRoster.add(newStudent);
    System.out.printf(firstRoster.toString());
}

Входной текстовый файл будет выглядеть примерно так:

John,12,95
Mary,11,99
Bob,9,87

Однако,когда я пытаюсь распечатать массив firstRoster, он печатает только первый объект.В этом случае он напечатает Джона 3 раза.

John,12,95
John,12,95
John,12,95

Если я добавлю еще одного ученика в текстовый файл, он просто напечатает Джона 4 раза и так далее.

Метод toString в классе ClassRoster:

public String toString(){
    String classString = "";
    for(Student student : roster){
        classString = student.toString();   //The student object uses another toString method in the Student class
    }

    return classString;
}

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Ваша while петля заполняет все доступные позиции первым элементом.Затем, поскольку ни одна позиция не пуста, ничего не вставляется.

Цикл можно просто изменить следующим образом:

void add(Student newStudent){
    int i = 0;
    while(i != classSize){    //classSize is the size of the roster array
        if(roster[i] == null {   //roster is an array of Student objects
            roster[i] = newStudent;
            break;
        }
        i++;
    }
}

Теперь программа выйдет из цикла после заполнения пустой позиции.

0 голосов
/ 25 февраля 2019

В этом методе:

void add(Student newStudent){
    int i = 0;
    while(i != classSize){    //classSize is the size of the roster array
        if(roster[i] == null {   //roster is an array of Student objects
            roster[i] = newStudent;
        }
        i++;
    }
}

вы присваиваете 1-й newStudent объект всем элементам массива.Поэтому, когда вы пытаетесь присвоить 2-й или 3-й, ни один из элементов не является null и никакое назначение не выполняется.Просто остановите цикл после выполнения 1-го назначения:

void add(Student newStudent){
    int i = 0;
    while(i != classSize){    //classSize is the size of the roster array
        if(roster[i] == null {   //roster is an array of Student objects
            roster[i] = newStudent;
            break;
        }
        i++;
    }
}

Редактировать :ваш ClassRoster класс, как он есть, будет возвращать только последние данные ученика.Но вы также должны проверить на нули.Поэтому перейдите к следующему:

public String toString(){
    String classString = "";
    for(Student student : roster){
        if (student != null)
          classString += student.toString() + "\n";
    }

    return classString;
}

Я не знаю toString() вашего Student класса, я предполагаю, что он работает как ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...