1

コースをカプセル化するクラスを作成する必要があります。コースには、コード名、説明、単位数の 3 つの属性があると想定されます。コンストラクター、アクセサーとミューテーター、メソッドtoStringequals.

この課題の一環として、クライアント クラスを作成して、Courseクラス内のすべてのメソッドをテストする必要があります。Course クラスは終了したと思いますが、クライアントの記述に問題があります。私が試したすべてのことについて、「非静的変数は静的コンテキストから参照できません」というエラーが表示されます。私は何を間違っていますか?

わかりました、コードを書き直しました。mutator メソッドを機能させる方法と、ユーザーに入力を求めて新しいコースのすべての値を設定し、アクセサー メソッドと mutator メソッドを使用しているときにそれらを画面に出力する方法がまだわかりません。みんな助けてください。ありがとう

public class ManualClass 
{
public static void main(String[] args) 
{
    Course compSci = new Test2().new Course("Comp Sci","IT1101",3.0);
    System.out.println(compSci+ "\n");


    Course dave = new Test2().new Course("Hist1111","World History",4.0);     
    System.out.print(dave.getCourseCode() + " " + dave.getDescription() 
                + " " + dave.getCreditHours() + "\n");
}

public class Course 
{
//Instance Variables
private String courseCode;
private String description;    
private Double creditHours;

public Course() 
{
    courseCode = null;
    creditHours = 0.0;
    description = null;
}

//Constructor
public Course(String courseCode, String description, double creditHours) 
{    
    this.courseCode = courseCode; 
    this.description = description;
    this.creditHours = creditHours;
}

//Accessors (Getters)
public String getCourseCode() 
{
    return courseCode;
}

public String getDescription()
{
    return description;
}

public double getCreditHours()
{
    return creditHours;
}

//Mutators (Setters)
public void setCourseCode(String CourseCode)
{
 this.courseCode = courseCode;
}

public void setDescription(String description)
{
 this.description = description;
}

public void setCreditHours(double creditHours)
{
 this.creditHours = creditHours;
}

    // toString Method
    public String toString()
    {
        DecimalFormat creditsFormat = new DecimalFormat ("#0.0");

        return "Code: " + courseCode + "; Description: " 
               + description + "; creditHours: " 
               + creditsFormat.format(creditHours);
    }

    // Equals Method
    public boolean equals(Object o)
    {
        if (!(o instanceof Course))
            return false;

        else
        {
            Course objCourse = (Course) o;
            if (courseCode.equals(objCourse.courseCode)
                && description == objCourse.description
                && creditHours == objCourse.creditHours)

                return true;

            else
                return false;
        }
    }
}
}
4

2 に答える 2

1

Coursestatic 内部クラスと同様に、次のインスタンスをCourse使用して修飾されたインスタンスを作成する必要がありManual_Classます。

Course csi = new Manual_Class().new Course("CSI", "Comp Sci", 3.0);

Courseまたは、クラス宣言を最上位クラスのスコープ外に移動することもできますManual_Class。その場合、現在の構文を使用できます。

publicまた、ファイルごとにクラス宣言を 1つだけ持つことができます。これは最上位クラスにする必要があります。Courseクラス宣言からそのキーワードを削除できます。

于 2013-01-17T17:55:49.370 に答える
0

あなたが書いているのは、古典的な男子生徒の手続き型言語コードです。オブジェクト指向ではありません。この声明の背後にある理由を説明しましょう。

oop コードを書くときは、「変更」を考慮する必要があります。今後作成するすべてのコースが同じ属性を持つわけではありません。

たとえば、あなたの要件がどのようになると思うかを共有します。すべてのコースは、段階ごとの成熟度サイクルを経ます。一部のコースは、十分に説明する必要があるだけで、そこで終了します。一部のコースには、それに関連付けられた書籍と、いくつかのハイパーリンクがあります。一部のコースには画像があり、一部のコースには関連するビデオ ファイルがあります。一部は非常に成熟しており、完全なコース管理、カウンセリング、登録、学生の入学管理、学生の成績管理、最後に学生の証明書と報酬が必要になります。

学生のように考える場合、これらすべての属性を持つ 1 つのクラスを作成すると、必要のないすべてのフィールドが null になります。

成熟した学生のように考える場合は、CourseLinksOnly、CourseImagesOnly、CourseImagesAndVideos、CourseVideosOnly などの複数のクラスを作成することになるでしょう。

アーキテクトのように考えるなら、実際のビジネス指向の名前と機能を使用してクラスをモデル化します。CourseBasic、CourseOnline、CourseClassroom、CourseStarted、CourseCompleted、CourseArchived。そして、これらのそれぞれはおそらく相互に継承されます。しかし同時に、コードの残りの部分はオブジェクトを参照せず、代わりにインターフェイス (コントラクト) を参照します。そして、私は続けることができます.....

私のアドバイスは、学習を非常に迅速に新しいレベルに引き上げることです。完全に建築家のように考えてください。勉強を始めるのに良い本はHead First Design Patterns Java. 最初の 3 つの章は、頭をまっすぐにして、手続き型言語の考え方から抜け出すのに十分です :)。

于 2013-01-18T03:11:08.937 に答える