2015-03-27 4 views
-1

У меня возникают проблемы с объектами и классами.Как добавить объект курса к массиву с помощью метода addCourse()

я должен был определить два класса:

  • Course: курс имеет код, имя и количество кредитов
  • Teacher: учитель имеет имя и фамилию. Его можно спросить его полное имя.

До сих пор так хорошо, у меня нет проблемы с ними, но я должен сделать следующее задание, которое я пытался сделать в течение последних 2-х дней, и я не мог найти правильный ответ:

Расширить код учителя. У учителя также есть список курсов, которые он может преподавать. Добавьте массив кода в код. Также добавьте функцию addCourse(Course aCourse) в код. Курсы также могут быть удалены учителями.

Я мог бы делать все, что в моих силах, но не знаю, как создать метод addCourse(Course aCourse).

Найдите ниже моего кодирования, но оно должно быть в соответствии со способом, описанным:

public class Course { 

    private String courseCode; 
    private String courseName; 
    private String numberOfCredits; 

    public Course(String courseCode, String courseName, String numberOfCredits) { 
     super(); 
     this.courseCode = courseCode; 
     this.courseName = courseName; 
     this.numberOfCredits = numberOfCredits; 
    } 

    public void print() { 
     System.out.println(courseCode + "\t" + courseName + "\t" + numberOfCredits); 
    } 

    public static void main(String[] args) { 

     Course[] courseArray = new Course[4]; 

     System.out.println("Code" + "\t" + "Name" + "\t" + "Credits"); 

     courseArray[0] = new Course("001", "Hist", "3"); 
     courseArray[1] = new Course("002", "Phy", "3"); 
     courseArray[2] = new Course("003", "Math", "3"); 
     courseArray[3] = new Course("004", "Log", "3"); 

     for (int i = 0; i < courseArray.length; i++) { 
      courseArray[i].print(); 
     } 

    } 
} 
+0

Я думаю, что он имеет право использовать структуру списка на основе требуемого addCourse метод (курс) (это будет довольно сложно реализовать с структуру массива, потому что вам нужно будет обрабатывать изменение размера, и кажется, является начальным курсом) –

+0

Ниже вы можете найти код, который я сделал, но он должен, используя метод, описанный: –

+0

@ MarcoPierreFernándezBurgos Я не вижу здесь определенного класса «Учитель»? –

ответ

1

Массивы фиксированной длины коллекции объектов, так что вы должны решить, насколько велик ваш массив должен быть. Назовем длину вашего массива MAX_COURSES. Более продвинутое решение может изменить размер массива по мере необходимости, но я получаю впечатление, что это выходит за рамки вашего курса.

Таким образом, вам необходимо определить массив Course[] как поле вашего Teacher класса. Синтаксис объявлений массива - quite easy to research, поэтому я не буду его здесь вводить. Просто убедитесь, что длина вашего массива равна MAX_COURSES.

Теперь, чтобы добавить курсы в массив, вам нужно знать, где их разместить. Для того, чтобы следить за следующую свободную позицию массива, проще всего сделать, это объявить поле в классе:

private int numCourses = 0; 

Теперь, когда вы добавляете новый курс, вставьте курс в индекс, указанном numCourses. Убедитесь, что вы добавили numCourses после того, как вы добавили курс.

Наконец, вы должны проверить, заполнен ли ваш массив, прежде чем вы согласитесь вставить новый курс в массив, то есть проверьте, меньше ли numCourses, чем MAX_COURSES. Если это не так, вам нужно выбросить исключение.

1

Я бы рекомендовал использовать коллекцию (например, List), а не массив. Код будет выглядеть примерно так:

public class Teacher { 
    private final String firstName; 
    private final String lastName; 
    private final List<Course> courses = new ArrayList<Course>(); 

    public Teacher(String firstName, String lastName) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 

    public void addCourse(Course course) { 
     courses.add(course); 
    } 
} 

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

Если вы хотите вернуть список в виде массива, вы всегда можете его преобразовать, например.г:

public Course[] getCourses() { 
    return courses.toArray(new Course[courses.size()]); 
} 

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

+0

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

+0

Я вижу, что ArrayList кажется лучше и клешней, я попробую. –

+0

Как мне добавить метод addCourse для добавления курса? –

0

Здесь действительно 3 варианта.

Вариант 1

Если вам разрешено использовать List конструкции:

private List<Course> courses = new ArrayList<Course>(); 

public void addCourse(Course aCourse) 
{ 
    if (aCourse == null) 
    { 
     return; 
    } 

    courses.add(aCourse); 
} 

Вариант 2

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

// Yes, I stole Duncan's variable names 

private final int MAX_COURSES = 10; 

private int numCourses = 0; 
private Course[] courses = new Course[MAX_COURSES]; 

public void addCourse(Course aCourse) { 
    if (aCourse == null) 
    { 
     return; 
    } 

    if (numCourses >= courses.length) 
    { 
     return; 
    } 

    courses[numCourses] = aCourse; 
    numCourses++; 
} 

Вариант 3

Это идентично предыдущему пункту, но немного умнее в том, что он может изменить размер массив ... путем создания нового, используя статический метод Arrays.copyOf

// Yes, I stole Duncan's variable names 

private final int MAX_COURSES = 10; 

private int numCourses = 0; 
private Course[] courses = new Course[MAX_COURSES]; 

public void addCourse(Course aCourse) { 
    if (aCourse == null) 
    { 
     return; 
    } 

    if (numCourses >= courses.length) 
    { 
     int size = courses.length * 2; 
     courses = Arrays.copyOf(courses, size); 
    } 

    courses[numCourses] = aCourse; 
    numCourses++; 
} 
+0

. Примечание. Если вашему преподавателю не нравятся несколько возвратов, у вас будет переписать часть этого. – Powerlord

+0

На самом деле, некоторые из этих возвратов должны, вероятно, генерировать исключения ... 'IllegalArgumentException' для передачи, например, в null. – Powerlord

Смежные вопросы