2017-02-21 13 views
-4

学生が追加されると、arraylistが増加するように、コースクラスの学生arraylistを作成しようとしています。これは私がこれまでに持っているコードです:学生をコースクラスに追加するための学生arraylistの作成Java

import java.util.ArrayList; 

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 

/** 
* 
* @author Saj 
*/ 
public class Course { 
    private String courseName; 
    private int noOfStudents; 
    private String teacher; 
    public static int instances = 0; 

    //Getters 
    public String getCourseName(){ 
     return this.courseName; 
    } 
    public int getNoOfStudents(){ 
     return this.noOfStudents; 
    } 
    public String getTeacher(){ 
     return this.teacher; 
    } 

    //Setters 
    public void setCourseName(String courseName){ 
     this.courseName = courseName; 
    } 
    public void setNoOfStudents(int noOfStudents){ 
     this.noOfStudents = noOfStudents; 
    } 
    public void setTeacher(String teacher){ 
     this.teacher = teacher; 
    } 

    /** 
    * Default constructor. Populates course name, number of students with defaults 
    */ 
    public Course(){ 
     instances++; 
     this.noOfStudents = 0; 
     this.courseName = "Not Set"; 
     this.teacher = "Not Set"; 
    } 

    /** 
    * Constructor with parameters 
    * @param noOfStudents integer 
    * @param courseName String with the Course name 
    * @param teacher String with the teacher 
    */ 
    public Course(int noOfStudents, String courseName, String teacher){ 
     this.noOfStudents = noOfStudents; 
     this.courseName = courseName; 
     this.teacher = teacher; 
    } 

} 

私は配列リストの実装方法がわかりません。誰かが私を正しい方向に向けることができますか?

+0

「イム配列リストを実装する方法がわかりません。」あなたはArrayListを実装しません。組み込みのコレクションです。 'List students = new ArrayList ();'のように宣言してください。これは実際にStudentクラスを作成したと仮定しています。 – Arqan

+3

ドキュメントを読んだり、 'ArrayList'に関するチュートリアル/ガイドを見たことがありますか? – tnw

+0

@Arqanどこに宣言しますか? – donk2017

答えて

0

だけで、あなたのクラスにコンストラクタで

List<Student> students; 

を属性を追加し、このリストを初期化:

students = new ArrayList<>(); 

一覧表示するには、学生を追加する方法を作成します。

public boolean addStudent(Student stud) { 
    if (stud == null || students.contains(stud)) { 
     return false; 
    } 
    students.add(stud); 
    return true; 
} 

またためhttps://docs.oracle.com/javase/8/docs/api/java/util/List.htmlをチェックリストの文書化。 質問です、生徒をコンストラクタに追加しますか?もしそうなら、あなたはあなたが意図し何を達成するために多くのチュートリアルを見つけることができる研究の少しであなたのコンストラクタ

public Course(int noOfStudents, String courseName, 
       String teacher, List<Student> students){ 
    this.noOfStudents = noOfStudents; 
    this.courseName = courseName; 
    this.teacher = teacher; 
    this.students = new Arraylist<>(students); 
} 
+0

私は微調整されたコードで投稿したが、私はエラーが表示されている答えを参照してください。 – donk2017

+0

あなたはどんなエラーがありますか? List 属性はどこに宣言しましたか? =右 'のpublic static int型のインスタンスの後に0を追加してください;' だけのプライベート '一覧生徒型;' 使用; ' +ワンチップを、 ' ArrayListの studentList =新しいArrayListを()を使用していません'リスト studentList = new ArrayList ();'代わりに – Nayriva

1

にパラメータを追加し、私はあなたがanswearを持っているだけのように、正しい道にあなたを設定しようとするでしょうどこかで始まる。

  1. 生徒とは何ですか? 名前だけの文字列か、いくつかのプロパティを持つことができる生徒を表すオブジェクトですか? 一例は、あなたはすべての学生がコースに追加格納するためのいくつかの場所が必要です

    public class Student{ 
        private int number; 
        private String name; 
        private int age; 
        // Basically anything that makes sense for a student. 
    
        public Student(int number, String name, int age){ 
         this.number = number; 
         this.name = name; 
         this.age = age; 
        } 
    
        // .... Getters and Setters. 
    } 
    
  2. あり、それはArrayListのは、すなわち

    List<Student> students = new ArrayList<Student>(); 
    Student foo = new Student(23, "Foo", 22); 
    students.add(foo); // This is how you add to a List (in this case a List of Student objects and more precisely an ArrayList of Students). 
    

あなたがリストを保持する必要があります何のためにあるのかでありますあなたのクラスのクラスでインスタンス変数として、あなたが学生を渡すことができる方法を追加し、必要な場合はあなたがいくつかの検証を行うことがありますあなたは、あなたの学生のリストに追加する必要があるすべてのメソッド内に。

疑問がある場合は、簡単に見つけられる質問をする前にまず解決策を探してください。 、

Java List

Java ArrayList

EDITあなたの生徒を追加する方法がほとんど行われていますが、エラーを持っており、また、学生のリストが唯一のコンストラクタ内に常駐:ここに は、いくつかの参照ですあなたは外の学生を保存するためのリストを使用することはできませんことを意味します。

以下は、正しいコード

/** 
* Constructor with parameters 
* @param noOfStudents integer 
* @param courseName String with the Course name 
* @param teacher String with the teacher 
*/ 
public Course(int noOfStudents, String courseName, String teacher){ 
    this.studentList = new ArrayList<Student>(); // The declaration is in above in your class, as an instance variable. 
    this.courseName = courseName; 
    this.teacher = teacher; 
} 
ArrayList<Student> studentList; // You can move this so it sits above besides your other variables, but it will also work like this. 
public boolean addStudent(Student student){ 
    if (student==null || studentList.contains(student)) { // You had Student.contains, wich will give an error because Student (class) doesnt have a static method named contains. 
     return false; 
    } 
    studentList.add(student); // you had the same problem here, you had Student.add(student), wich is wrong and it would not compile. 
    return true; 
} 

あなたはStudentクラスを作成して、それがエラーなしであることを確認しています。

テストおよび作業コードは、より正確にあなたのニーズを気力するように変更し

import java.util.ArrayList; 


public class Course { 
    private String courseName; 
    private int noOfStudents; 
    private String teacher; 
    public static int instances = 0; 
private ArrayList<Student> studentList; 

    //Getters 
    public String getCourseName(){ 
     return this.courseName; 
    } 
    public int getNoOfStudents(){ 
     return this.noOfStudents; 
    } 
    public String getTeacher(){ 
     return this.teacher; 
    } 

    //Setters 
    public void setCourseName(String courseName){ 
     this.courseName = courseName; 
    } 
    public void setNoOfStudents(int noOfStudents){ 
     this.noOfStudents = noOfStudents; 
    } 
    public void setTeacher(String teacher){ 
     this.teacher = teacher; 
    } 

    /** 
    * Default constructor. Populates course name, number of students with defaults 
    */ 
    public Course(){ 
     instances++; 
     this.noOfStudents = 0; 
     this.courseName = "Not Set"; 
     this.teacher = "Not Set"; 
    } 

    /** 
    * Constructor with parameters 
    * @param noOfStudents integer 
    * @param courseName String with the Course name 
    * @param teacher String with the teacher 
    */ 
    public Course(int noOfStudents, String courseName, String teacher){ 
     this.studentList = new ArrayList<Student>(); 
     this.courseName = courseName; 
     this.teacher = teacher; 
    } 

    public boolean addStudent(Student student){ 
     if (student==null || studentList.contains(student)) { 
      return false; 
     } 
     studentList.add(student); 
     return true; 
    } 

    public void printStudents(){ 
    for(Student s : studentList) 
      System.out.println(s.getName() + ", with " + s.getAge() + " year(s)"); 
    } 

public static class Student{ 
     private int number; 
     private String name; 
     private int age; 
     // Basically anything that makes sense for a student. 

     public Student(int number, String name, int age){ 
      this.number = number; 
      this.name = name; 
      this.age = age; 
     } 

     // .... Getters and Setters. 

     public int getNumber(){ 
      return this.number; 
     } 

     public String getName(){ 
      return this.name; 
     } 

     public int getAge(){ 
      return this.age; 
     } 
} 
    // Testing code 
    public static void main(String[] args){ 
     Course oop = new Course(6, "Object Oriented Programming", "LeBron James"); 
     oop.addStudent(new Course.Student(6, "Michael Jordan", 56)); 
     oop.addStudent(new Course.Student(23, "Kyrie Irving", 24)); 
     oop.addStudent(new Course.Student(14, "Kevin Love", 27)); 
     System.out.println(oop.getCourseName() + " has the following students"); 
     oop.printStudents(); 

    } 

} 
+0

私は修正されたコードで投稿したが、私はエラーが表示されている答えを参照してください。 – donk2017

+0

@ donk2017私の編集を参照してください、私はあなたのコードでいくつかの問題を修正した、あなたはそれにいくつかの深刻な問題があった。 –

+0

私はtoStringを使って、メインクラスから 'System.out.println(course.toString());'と 'System.out.println(student.toString());'を実行してコースを出力しなければなりません。学生情報また、コードを実行するときに端末から学生の詳細を入力する必要があります。 – donk2017

関連する問題