2012-04-22 4 views
1

Я создал в объекте StudentList list1, который saving[Serialization] информация студента (name,id,age,gpa,etc) в list1 в ArrayList<Student>, так что list1[0] = 1st student's info, то list1[1] = 2nd student's info и так далее.двух различных типов массивов в первый массив

Кроме того, новый ArrayList<Subject> в объекте SubjectList list2 для всех предмета студента индекс 0, например list2[0]=(java,math,etc) [для первого студента] list2[1]=(c++,english,etc) [для второго студента] сохраняется в файле.

Я хочу, чтобы добавить тему рядом с информацией студентов:

индекс песни1 [0] = 1-инфо Стьюдента, индекс [1] = Субъекты 1-й Стьюдента.
индекс [2] = 1 Информация для учеников, индекс [3] = 1-й предмет ученика.

Я застрял в этой простой проблеме. Помогите пожалуйста.

package studentPanel; 

public class Main { 
    public static void main(String[] args){  
     Student s = new Student(null, null, null, null); 
     s.stulist.add(new Student("Smith", "1", "M", "3")); 
     s.stulist.add(new Student("Jenny", "2", "F", "4")); 
     s.stulist.add(new Student("Roger", "3", "M", "2"));  
     System.out.println(""+s.stulist); 
     for(int i=0;i<s.stulist.size();i++){ 
      Student search = s.stulist.get(i); 
      if(search.toString().contains("Jenny")){ 
       System.out.println("Found"+i); 
       s.addSubject(s.new Subject("OOP","007")); 
       s.addSubjects(s.sublist); 
       System.out.println(""+s.stulist.get(i)+""+s.sublist); 
      } 
      else System.out.println("Not Found"+i); 
     } 
       System.out.println(""+s.stulist); 
    } 
} 

package studentPanel; 

import java.util.*; 

public class Student { 
    public String name, id, gender, cgpa; 

    ArrayList<Subject> sublist = new ArrayList<Subject>(); 
    ArrayList<Student> stulist = new ArrayList<Student>(); 
    public void addSubject(Subject new_subject) { 
     sublist.add(new_subject); 
    } 
    public void addSubjects(List<Subject> subjects_list) { 
     for (Subject s : subjects_list) 
      addSubject(s); 
    } 
    public Student(String name, String id, String gender, String cgpa) { 
     this.name = name; 
     this.id = id; 
     this.gender = gender; 
     this.cgpa = cgpa; 
    } 
    public String toString() { 
     return "Name: " + name + "\tID: " + id + "\tGender: " + gender + "\tCGPA: " + 

cgpa+ "\n"; 
    } 
    public class Subject { 
     public String cname,cid; 
     public Subject(String cname, String cid) { 
      this.cname = cname; 
      this.cid = cid; 
     } 
     public String toString() { 
      return "Course: " + cname + "\tCode: " + cid; 
     } 
    } 
} 

Я просто не могу получить это право, это было предположить, чтобы добавить тему `s.addSubject (s.new Тема

("ООП", "007"));` к студент Дженни.

Выход Должно быть так:

[Имя: Smith ID: 1 Пол: мужской CGPA: 3

, Имя: Jenny ID: 2 Пол: F CGPA: 4

, Имя: Roger ID: 3 Пол: мужской CGPA: 2]

Не Found0

Found1

[Имя: Jenny ID: 2 Пол: F CGPA: 4] [Курс: OOP, код: 007]

Не Found2

[Имя: Smith ID: 1 Пол: мужской CGPA: 3

, Имя: Jenny ID: 2 Пол: F CGPA: 4 [курс: OOP, код: 007]

, имя: Roger ID: 3 Пол: мужской CGPA: 2]

+0

Если я правильно понимаю, у вас есть 2 списка. Один из них заполнен объектами Student, а другой - с объектами String.И вы хотите добавить их в новый список, где newlist [evens] = Students и newlist [odds] = Strings. Это верно? –

+1

Если ваш код слишком грязный для публикации, создайте короткий, но полный пример, который * не слишком запутан для публикации ... –

+0

Почему вы не добавляете информацию о предмете в информацию о студенте? – rsp

ответ

2

Я думаю, что подход вы должны принимать что-то похожее на это:

class Student{ 
    private String name, ID; 
    private int gpa, age; 
    //More personalia stuff... 

    private ArrayList<Subject> subjects; 

    public void addSubject (Subject new_subject) { subjects.add(new_subject); } 
    public void addSubjects (List <Subject> subjects_list) { 
     for (Subject s : subjects_list) addSubject(s); 
    } 

    //Getters 
    public int getGPA() { return gpa; } 
    public int getAge() { return age; } 
    public String getName() { return name; } 

    //.. More personalia getters 

    //Setters 
    public void setGPA(int new_gpa) { gpa = new_gpa; } 



} 

class Subject { 
    String description; 
    String ID; 

} 

Теперь, если у вас есть список студентов говорят:

ArrayList <Student> all_students; 

Здесь вы можете пройти список и добавить тему к любому или ко всем из них.

Редактировать: добавлены некоторые геттеры и сеттеры, которые дают более четкое представление о том, как вы получаете доступ к информации об объекте.


Edit 2 для решения обновленного поста: Есть целый ряд вопросов, с вашим кодом. Давайте пройдемся по ним из материала, наиболее высокого уровня к низкому уровню (не то же самое значение имеет ум, вы)

1) имена класса Класс не должен называться «Main». Неясно, что такое класс. Вместо этого назовите это, что это такое: система регистрации учащихся-субъектов. class StudentRegister должно быть прекрасно.

2) Содержание Класс Вы включили класс Subject как внутренний класс в Student. Это не имеет смысла, поскольку субъект не является частью ученика (в буквальном смысле в реальной жизни). Это не самая худшая его часть; имея Subject как внутренний класс, вы создадите множество одинаковых предметов для каждого ученика. Это полностью избыточно.

Теперь вы также включили список всех учеников в каждом объекте Student. Это намеренно? Если это так, это кажется немного ошибочным. Студенту A не нужно и, вероятно, никогда не узнает обо всех других учениках. Не говоря уже о том, что каждый раз, когда вы добавляете нового ученика N, вам нужно добавить N ко всем объектам-ученикам, которые в настоящее время существуют. Это тоже избыточно.


Предлагаемое решение

Давайте подумаем о том, что вы знаете, как студент. Вы знаете:

  • ваш возраст (частный ИНТ возраст)
  • ваш GPA (частный ИНТ GPA)
  • ваш ID (частная строка ID)
  • Ваше имя (частное имя String)
  • в список предметов, которые вы принимаете (частные предметы списка)

Обратите внимание, что вы, будучи студентом, не имеете контроля над тем, что описание и идентификатор курса

Все эти частные переменные являются частными, потому что это те вещи, которые вы, как ученик, раскрываете по запросу кого-то. Это сродни тому, что кто-то спрашивает вас: «Как тебя зовут?» или «Какой у тебя возраст?» и т. д. Это то, что вы выполняете, реализуя геттеры, такие как getName(), getAge().

Теперь рассмотрим часть, выделенную курсивом. Когда кто-то спрашивает вас, какие курсы вы принимаете, вы просто ссылаетесь на список курсов, которые являются общими для вас и других студентов, которые зачислены в университеты. Вы не создаете свои собственные курсы, о которых никто больше не знает. Поэтому субъект не должен быть внутренним классом в вашем классе Student. Это вместо ссылки (то есть указатель) на объект курса, предлагаемый университетом (продолжить чтение для дальнейшего объяснения)

Теперь рассмотрим объект курса. Это конечно объект не нужно знать о:

  • список студентов, которые обучаются в данном году
  • любые другие предметы

нуждается Любой данный объект курс, чтобы узнать:

  • это описание курса
  • курс ID
  • , как Тринг представление (то есть то, что вы реализовали в ToString())

Наконец, в вашем StudentRegistry классе, вы должны иметь два списка в настоящее время: - список студентов, обучающихся в университете: List <Student> all_students; - список всех предметов/курсов: `List all_subjects;

Помните, что у каждого ученика есть методы для добавления предметов? Вы просто ссылаетесь на объекты курса, которые существуют в студенческом реестре, и попросите каждого ученика добавить их в свой список тем. Не будет создано новых предметов. Любые предметы в каждом учебном плане учащегося будут относиться к объектам в списке all_subjects, содержащемся в классе StudentRegistry

+0

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

+0

ok, отредактированный по оригинальному вопросу – Tamim

+0

A. Исправьте меня, если я ошибаюсь. 1. Основной должен быть класс StudentRegister или любое другое относительное имя. 2. класс StudentRegister содержит фиксированный Courselist и нефиксированный Studentlist (New Comer). 3. а) Персональная информация студента всегда (имя и т. Д.) Всегда конфиденциальна. б) Я хотел, чтобы вся информация была как Строки. проблема возникает при задании возраста, но пользователь вводит «ABCD». Я знаю, что для этого существует метод исключения. не знаю хорошо. 4. «Это намеренно?» Я думаю, вы имеете в виду это 'ArrayList stulist = new ArrayList ();' не предназначено. Вам нужно быть в StudentRegister? – Tamim

0

You может использовать метод добавления класса List, который также принимает индекс.

Посмотрите на the method javadocs.

3

Я думаю, у вас есть две разные проблемы.

Ваша первая проблема:

Первый в том, что у вас есть список, и вы хотите поместить различные объекты в этом списке (студента-объекта и субъект-объект). Вы можете сделать это двумя разными способами.Первый способ состоит в том, чтобы использовать список просто с объектами: List<Object> list = new ArrayList<Object>(); После этого вы можете добавить все в список, но вы также должны бросить все - это нехорошее решение. Второе и лучшее решение - обеспечить общий интерфейс для обоих объектов. Например, что-то называется IInformation, которое реализуют ваши классы. Но было бы сложно найти подходящий интерфейс для объекта-объекта и предмета-объекта. Но это вопрос вашего творчества.

Ваша вторая проблема:

Теперь к вашей второй проблеме. Я думаю, что ваш дизайн, архитектура или просто то, как вы хотите это сделать, неверно. В чем дело? Почему вы хотите разместить информацию в списке за учеником? Есть ли веская причина для этого? Я думаю, что есть лучшие решения. Например, ваш объект-ученик может содержать тему-информацию. Это было бы логично. Я, как студент, знаю предметы, которые изучаю. Другой способ заключается в создании третий объект, который содержит отображение между учеником и субъекта (т.е. отношения):

class Relation { 

private Student student; 
private Subject subject; 
} 

Вы можете хранить такой объект в списке.

+0

Как я сказал @rsp, это все так же, как варианты регистрации курса. , пока я хочу искать ученика по имени или id. затем добавьте тему только к определенному учащемуся. всего процесса необходимо создать только один файл для списка учеников. – Tamim

+0

@TamimZubair вы сказали решение самостоятельно. Вы хотите добавить тему к конкретному ученику. Затем укажите метод в классе ученика, например new Student(). AddSubject (subject). Ответ от Арнаб Датта делает это неплохо. Сериализация в файл - это еще один тобик (но не проблема). –

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