2016-10-24 7 views
-3

私は自分のJavaプログラミングコースのプロジェクトを持っています。デモ/テスタープログラムの実装

の指示では、単純なクラスとテスタークラスを作成しなければならず、そのクラスにはDefaultコンストラクターが含まれている必要があります。 3つのパラメータ(メイク、モデル、価格)を持つパラメータ化されたコンストラクタ。 getMake()を呼び出してmakeを返すアクセサメソッド。 getModel()を呼び出してモデルを返すアクセサメソッド。 getPrice()を呼び出して価格を返すアクセサメソッド。 MutatorメソッドsetMake(文字列newMake)を使用してmakeを設定します。 Modelを設定するためのMutatorメソッドsetModel(String newModel)。価格を設定するためのMutatorメソッドsetPrice(double newPrice)。

私はクラスとテスタープログラムを作成しており、クラスは完全にコンパイルされています。 私はそれを実行しようとすると、メインメソッドがないというエラーが表示されますが、。今、私はテスタープログラムのための私の教授の例に従って、私はそれについていくつかのエラーを取得します。誰かが私に正しい方向のポインタを与えることができれば、私はそれを感謝します。

質問:テスタープログラムを実装するにはどうすればよいですか? zipファイルを作成する必要はありますか?

public class Automobile 
{ 
    private String make;  
    private String model; 
    private double price; 

    public Automobile() 
    { 
     make = "Lexus2017"; 
     model = "RX"; 
    } 

    public Automobile(String initMake, String initModel, double initPrice) 
    { 
     make = initMake; 
     model = initModel; 
     price = initPrice; 
    } 

    public String getMake() 
    { 
     return make; 
    } 

    public String getModel() 
    { 
     return model; 
    } 

    public double getPrice() 
    { 
     return price; 
    } 

    public void setMake(String newMake) 
    { 
     make = newMake; 
    } 

    public void setModel(String newModel) 
    { 
     model = newModel; 
    } 

また、以下は私のテスタークラス(有するものである:私は、次のクラスのために私のコードです...

をそうしようとしたとずっと助けていないようでしたエラーの多くは):

public class AutomobileTester 
{ 
    public static void main(String[] args) 
    { 
     Automobile make = new Automobile("Lexus 2017"); 
     System.out.println("The car is " + make.getMake()); 

     Automobile model = new Automobile("RX"); 
     System.out.println("The car is " + Automobile.getModel()); 

     Automobile price = new Automobile("43020"); 
     System.out.println("The car is " + Automobile.getPrice()); 

     // Use the mutator to change the make variable 
     Automobile.setMake("Lexus 2017"); 
     System.out.println("The car is " + backDoor.getState()); 

     // Use the mutator to change the model variable 
     Automobile.setModel("RX"); 
     System.out.println("The car is called " + backDoor.getName()); 

     Automobile.setPrice("43020"); 
     System.out.println("The car is " + price.getPrice()); 
    } 
} 

これが私の最初の時間は、コンストラクタで働いている、と私は、Javaに非常に新しいので、私は明白な誤りについてすみません。お時間をいただきありがとうございました。

+1

'

別のオプションは、独自のビルダーを使用してパラメータを渡すことですtでパラメータ化されたコンストラクタ新しい自動車( "Lexus 2017"); ' –

+0

クラス名を使ってメソッドにアクセスしないでください。ここでは多くのエラーがあります。あなたは私たちにそれらをすべて修正し、あなたの任務を遂行することを期待していますか? –

+0

@ cricket_007いいえ、それはばかばかしいでしょうし、私はそのようなことを何も学んでいません。 3つの章を読み、講義ノートを聞いて、何かが私のためにクリックしていないので、クラスを実装する方法を理解したいだけです。私はちょうど文脈のために自分のコードを入れたいと思っていました。 –

答えて

1

最初の問題の1つは、メソッド/関数に必要なすべてのパラメータを提供する必要があるJava(およびほとんどのプログラミング言語)では、コンストラクタへの呼び出しに適切な数のパラメータを使用しないことです/ 1つの呼び出しでコンストラクタ。あなたのコードの修正が使用することです:あなたはまずあなたがstaticコールを使用しinstanceコールを使用車情報を印刷するとき

Automobile car = new Automobile("Lexus 2017", "RX", 43020.0D); 

はまた、私は違いにあまりに行くことはありません基本的にはinstanceコールでは、staticがオブジェクトをインスタンス化する必要があります。変数を変更するよう

System.out.println("The car is a " + car.getMake() + ", the brand is " + car.getModel() + ", the price is $" + car.getPrice()); 

を使用してする必要があります:

car.setMake("My New Car Make"); 

の代わりに:staticとの違いについては

Automobile.setMake("My New Car Make"); 

この問題の修正プログラムは何をするだろうinstanceの場合、hereherehereと表示されます。

+0

「Automobile car = new Automobile( "Lexus 2017"、 "RX"、43020.0D);」と表示された場合、43020以降のDは価格を二重変数として認識しますか?また、私の割り当てでは、静的変数ではなくインスタンス変数を使用するように指示しています。それは次の章まで来ない。 –

+0

クラス名はどうですか?それらは大丈夫ですか?自動車およびAutomobileTester?これらの名前を通じて、プログラムはクラスを実装することを知っていますか? –

+0

'd'または' D'文字は、その番号が 'double'型であることを示しています。これらのタイプの識別子の詳細はこちら[https://docs.oracle.com/javase/tutorial/java/nutsandbolts /datatypes.html)。静的vsインスタンス変数の使用に関しては、インスタンス呼び出しを使用すべき場所で静的呼び出しを使用していたことを指摘していました。名前に関しては、クラスを正しくインスタンス化することができるはずのものと全く同じ型式のものであれば、実際に使用することができます。[IDE](https://en.wikipedia.org/wiki/Integrated_development_environment)それを助けることができます。 –

0

これを正しく実行しました。このメソッドには、Automobileクラスのmakeインスタンス変数を使用してアクセスしました。

:他のどこでもあなたがAutomobile.someMethod()使用することを、今

Automobile make = new Automobile("Lexus 2017"); 
System.out.println("The car is " + make.getMake()); 

(サイドノート作りは、むしろCAR1それを呼び出す、または何か自動車インスタンスの悪い名前です)あなたがする必要があるため、それは、右ではありませんクラス全体ではなくインスタンスのデータを設定または取得します。

最後に、そのクラスにある3つのパラメータを使用してコンストラクタをテストする必要があります。

+0

ありがとうございます。 "make"は私の教授が使用したいインスタンス変数ですが、car1、car2、workの2つの自動車オブジェクトを作成する必要がありますか?'setMake(String newMake)'のようなものを使うでしょうか?そして、すべてのインスタンス変数に対してこれを行いますか? –

+0

私はメイクを持っている自動車だから、そうではなく、メイク自体 –

0

コンストラクタ呼び出しでエラーが発生しました。 あなたのコンストラクタは3つのパラメータ(make、model、price)を取りますが、メソッドを呼び出すときには1つだけを送ります。それは誤りです。 デフォルトでは、Javaクラスのコンストラクタはパラメータをとりません(あなたの場合、これは "new Automobile()"になります)。 テスターを実装するには、2つの方法があります。 まず、パラメータなしのコンストラクタを使用して車を作成し、設定されたパラメータ:

Automobile auto = new Automobile(); 
auto.setMake("Lexus 2017"); 
auto.setModel("RX"); 
auto.setPrice(43020); 

自動車自動車は、(=新しい自動車を作ります)。

Automobile auto2 = new Automobile("Lexus 2017", "RX", 43020); 

Automobile.java:

public class Automobile { 
private String make; 
private String model; 
private double price; 

public Automobile() { 
} 

public Automobile(String make, String model, double price) { 
    this.make = make; 
    this.model = model; 
    this.price = price; 
} 

public String getMake() { 
    return make; 
} 

public void setMake(String make) { 
    this.make = make; 
} 

public String getModel() { 
    return model; 
} 

public void setModel(String model) { 
    this.model = model; 
} 

public double getPrice() { 
    return price; 
} 

public void setPrice(double price) { 
    this.price = price; 
} 
} 

AutomobileTester.java:

public class AutomobileTester { 

public static void main(String[] args) { 

    Automobile auto = new Automobile(); 
    auto.setMake("Lexus 2017"); 
    auto.setModel("RX"); 
    auto.setPrice(43020); 
    System.out.println("The car1 is " + auto.getMake() + " " + auto.getModel() + " " + auto.getPrice()); 

    Automobile auto2 = new Automobile("Lexus 2017", "RX", 43020); 
    System.out.println("The car2 is " + auto2.getMake() + " " + auto2.getModel() + " " + auto2.getPrice()); 

} 

}

+0

はないだろう、私は 'Automatibleは' =新しい自動車(...)を作成について話して、文字列のmake' 'の話ではありません自動車自動車メイク= new();冗長でしょうか?また、メソッドのパラメータをインスタンス変数と同じにしたい場合は、このパラメータを使用することがわかります。いつあなたはそれらを使いたくないですか? –

+0

ええ、それは間違いです。それはAutomobile auto = new Automobile()です。 複数のパラメータを使用する場合は、複数のコンストラクタを実装できます。たとえば、あなただけの価格を使用したい場合:公共自動車(ダブル価格){ this.price = price; } そして、コールはAutomobile auto = new Automobile(1000)となります。または、価格とモデルを使用したい場合:公共自動車(文字列モデル、二重価格){ this.model = model; this.price = price; }そして、呼び出しは次のようになります:Automobile auto = new Automobile( "Rx"、1000); – Juan