2016-04-10 15 views
0

いくつかのオプションを持つ基本メニューを持つコードを作成しようとしています。これらのオプションは、AddStudent、changeName、setGradeなどのメソッドです。名前、学年、年齢を持つStudentというオブジェクトを作成しました。私はリンクされたリストに学生を追加したいが、私はメソッドを使用すると、それは動作しません追加します。ここに私のコードです:リンクされたリストのオブジェクト

import java.util.*; 
class Student { 
    int age; 
    int grade; 
    String name; 
    static LinkedList ll = new LinkedList(); 
    public Student (String n) { //we create here a student with a name and an age 
     name=n; 
     age=0; 
     grade=0; 
    } 
//------------------------------------------------------------------------- 
    public void p(String x) { 
     System.out.println(x); 
    } 

    public void addStudent() { 
     Scanner s = new Scanner(System.in); 
     p("Enter the name that you want"); 
     String f = s.nextLine(); 
     Student a = new Student(f); 
     ll.add(a); 
    } 

    public void changeName() {       //this method is to change the name of a student 
     Scanner s = new Scanner(System.in); 
     p("Enter whose name you want to change"); 
     String c = s.nextLine(); 
     p("Enter the name that you want"); 
     String b = s.nextLine(); 

    } 

    public void setGrade(Student a) {     //this method is to put the student's grade 
     Scanner s = new Scanner(System.in); 
     p("Enter the grade that you want"); 
     int g = s.nextInt(); 
     a.grade=g; 
    } 

    public void setAge(Student a) {     //This method is to put the student's grade 
     Scanner s = new Scanner(System.in); 
     p("Enter the age that you want"); 
     int h = s.nextInt(); 
     a.age=h; 
    } 

    public String getName(Student a) { 
     return a.name; 
    } 

    public int getAge(Student a) { 
     return a.age; 
    } 

    public int getGrade(Student a) { 
     return a.grade; 
    } 
} 

問題はaddStudentの方法です。私は同じプロジェクトを作ることができる他の方法もありますか?

+0

コンパイラからどのような問題がありますか? –

+1

どのようなエラーが発生しますか? – Polygnome

答えて

1

これを論理的に考えてみましょう。単一の生徒を表すStudentクラスがあります。なぜ学生は学生のリストを持っていますか?それは意味をなさない。

Courseのようなプログラムや、学生のリストを保持するものはありませんか?それがあなたのリストが属する場所です。あなたが魅力的な理由がある場合を除いて、静的を使用しないでください(まれです)。ここで

Course以内にあなたのLinkedListに学生情報格納それを保存するためにStudentを使用する、Courseクラスのスタートです。あなたはまだfindStudentメソッドを実装する必要があり、おそらく一覧を印刷する方法:

クラスコース:

import java.util.LinkedList; 
import java.util.Scanner; 

public class Course { 
    LinkedList ll = new LinkedList(); 
    Scanner s = new Scanner(System.in); 

    public void addStudent() { 
     p("Enter the name that you want"); 
     String f = s.nextLine(); 
     Student a = new Student(f); 
     ll.add(a); 
    } 

    public void changeName() {       //this method is to change the name of a student 
     Student student = findStudent(); 
     p("Enter the name that you want"); 
     String newName = s.nextLine(); 
     //student.setName(newName); 
    } 

    public void setGrade() {     //this method is to put the student's grade 
     Student student = findStudent(); 
     p("Enter the grade that you want"); 
     int grade = s.nextInt(); 
     //student.setGrade(grade); 
    } 

    public void setAge() {     //This method is to put the student's grade 
     Student student = findStudent(); 
     p("Enter the age that you want"); 
     int age = s.nextInt(); 
     student.setAge(age); 
    } 

    public Student findStudent(){ 
     p("Which student did you want to change? Please enter their name:"); 
     String name = s.nextLine(); 
     //Find student in the list - left for the author 
     Student student = null; 
     return student; 
    } 

    //------------------------------------------------------------------------- 
    public void p(String x) { 
     System.out.println(x); 
    } 

    public static void main(String[] args) { 
     Course course = new Course(); 
     course.addStudent(); 
     course.addStudent(); 
     course.changeName(); 
     course.setGrade(); 
    } 
} 

、修正Studentクラス:

import java.util.*; 

public class Student { 
    int age; 
    int grade; 
    String name; 

    public Student (String n) { //we create here a student with a name and an age 
     name=n; 
     age=0; 
     grade=0; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public void setGrade(int grade) { 
     this.grade = grade; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 

    public String getName(Student a) { 
     return a.name; 
    } 

    public int getAge(Student a) { 
     return a.age; 
    } 

    public int getGrade(Student a) { 
     return a.grade; 
    } 

    @Override 
    public String toString(){ 
     return "Student(name:" + name + ", age:" + age + ", grade:" + grade + ")"; 
    } 
} 
1

このコードは、一種の厄介ですStudentクラスには表示しないでください。たとえば、addStudentメソッドは静的メソッドではなく、呼び出すには、まずStudentのインスタンスをインスタンス化し、そのメソッドを呼び出す必要があります。しかし、この方法では、新規のStudentインスタンスの情報を入力するようユーザーに依頼しようとしていますが、これは不適切な設計です。

したがって、Studentクラスは、何をすべきかだけを実行してください。あなたのケースでは、Studentは年齢、等級、名前フィールドを保存し、これらのフィールドを初期化するためのコンストラクタと、必要に応じてこれらのフィールドを設定および取得するオプションのgetterメソッドとsetterメソッドを定義するだけです。

あなたのアプリケーションを管理する 'マネージャ'クラスが必要です。このクラスは生徒のリストを追跡し、新しい生徒の情報を入力して生徒インスタンスを初期化してリストに入れるように求めます。このManagerクラスでは、ユーザ入力や情報の表示が必要なUIを管理することさえできます。したがって、addStudentメソッドを提供することは、このクラスの責任となります。

Studentクラス自体は、コース選択プログラムなどのようにアプリケーションのロジックについては何も知らないはずです。独自の情報を管理するだけで、一部のマネージャークラスはアプリケーションのロジックを管理します。

関連する問題