2017-11-04 8 views
-4

これはWaffle.javaです。コンパイル後に正常に終了しました。Javaはコンストラクタとスーパーが必要ですが、すでに定義済みです

public class Waffle extends Customer{ 

    int waffle_favourite; 
    double amount1; 

     static double Waffle(int waffle_favourite, double amount1){ 

if(waffle_favourite == 1){ 
    System.out.println("You have picked CHOCHOLATE."); 
    System.out.println("The price is RM0.80."); 
     amount1 = 0.80; 
     return amount1;} 

    else if(waffle_favourite == 2){ 
    System.out.println("You have picked HONEY."); 
    System.out.println("The price is RM1.00."); 
     amount1 = 1.00; 
     return amount1;} 

    else if(waffle_favourite == 3){ 
    System.out.println("You have picked YOGURT."); 
    System.out.println("The price is RM1.50."); 
     amount1 = 1.50; 
     return amount1;} 

    else{ 
    System.out.println("Invalid value.");}return amount1;}} 

これはWaffle2.javaです。 CMDは必須コンストラクタですが、すでにWaffle.javaにビルド済みです。どうすれば解決できますか?私は後にコンパイルされ、このクラスをコンパイルしている

import java.util.Scanner; 

    public class Waffle2 extends Waffle{ 

    Scanner scan = new Scanner(System.in); 

    int waffle_state; 
    double amount2; 
    double total_amount; 
    double payment; 

    public Waffle2(int waffle_favourite, double amount1, int waffle_state, double amount2, double total_amount){ 
    super(waffle_favourite, amount1); 

    if(waffle_state == 1){ 
     System.out.println(""); 
    System.out.println("You have picked SOFT."); 
    System.out.println("The price is RM1.00."); 
     amount2 = 1.00; 
     total_amount = amount1 + amount2; 
     System.out.println("Your total amount is:RM " + total_amount); 
     System.out.println(""); 

for(int i=0; i <= 1; i++){ 

    System.out.print("Please keyin your payment:RM"); 
    payment = scan.nextDouble(); 

    if(payment < total_amount){ 
     total_amount -= payment; 

    System.out.println("You still need to pay RM:" + total_amount);} 

    else if(payment == total_amount){ 
     System.out.println("Thank you for your order."); 
      break;}    
else{ 
     System.out.println("Invalid value.");}}} 

    else if(waffle_state == 2){ 
     System.out.println(""); 
    System.out.println("You have picked CRISPY."); 
    System.out.println("The price is RM1.20."); 
     amount2 = 1.20; 
     total_amount = amount1 + amount2; 
     System.out.println("Your total amount is:RM " + total_amount); 
     System.out.println(""); 

    for(int i=0; i <= 1; i++){ 

    System.out.print("Please keyin your payment:RM"); 
    payment = scan.nextDouble(); 

    if(payment < total_amount){ 
     total_amount -= payment; 

    System.out.println("You still need to pay RM:" + total_amount);} 

    else if(payment == total_amount){ 
     System.out.println("Thank you for your order."); 
      break;}    
else{ 
     System.out.println("Invalid value.");}}} 
    else if(waffle_state == 3){ 
     System.out.println(""); 
    System.out.println("You have picked CHEWY."); 
    System.out.println("The price is RM1.50."); 
     amount2 = 1.50; 
     total_amount = amount1 + amount2; 
     System.out.println("Your total amount is:RM " + total_amount); 
     System.out.println(""); 

    for(int i=0; i <= 1; i++){ 

    System.out.print("Please keyin your payment:RM"); 
    payment = scan.nextDouble(); 

    if(payment < total_amount){ 
     total_amount -= payment; 

    System.out.println("You still need to pay RM:" + total_amount);} 

    else if(payment == total_amount){ 
     System.out.println("Thank you for your order."); 
      break;}    
else{ 
     System.out.println("Invalid value.");}}}}} 

は、このメッセージ 出てくるシンボル シンボルを見つけることができません:コンストラクタワッフル(int型、ダブル) 場所:クラスワッフル スーパー(waffle_favourite、amount1)。 ^ 1エラー

私は、HELPのためのTHXを多くの方法を試し、それでもエラーが起こりました。

+2

コードとして画像を投稿しないでください –

+0

「ワッフル」にはコンストラクタがありません。それは静的な方法です。 –

+1

[良い質問をするにはどうすればいいですか?](https://stackoverflow.com/help/how-to-ask)を参照してください。 – khelwood

答えて

0

Waffleには、デフォルトの引数なしコンストラクタ以外のコンストラクタがありません。これは:

static double Waffle(int waffle_favourite, double amount1){ 

はコンストラクタではありません。あなたはa)それがstaticだから、b)それが戻り値の型を持っていることが分かります。コンストラクタはどちらも持っていません。

したがって、そのようなコンストラクタがないため、super(waffle_favourite, amount1);を呼び出すことはできません。あなたがそこで呼び出すことができるのはsuper()ですが、それを明示的に呼び出す必要はありません。あなたが望むならば、あなたはWaffle.Waffle(waffle_favourite, amount1)を呼び出すことができます。

しかし、とにかくコンストラクタのように見えません。コンストラクタコンストラクタインスタンス。あなたは何も構築していない、あなたはただパラメータを使っているだけです。これは単なる方法です。

Waffle2は構文的に、コンストラクタを持っていないが、再び、それはWaffle2インスタンスを作成に関連していることをやっていない:あなたはメンバ変数にアクセスしているが、なぜ、むしろちょうどメンバ変数を使用するよりも、それは明らかではありません。コンストラクタの終わりに、Waffle2クラスの不変量は、このようにWaffle2を真とすべき規則と同様に設定する必要があります。実際にそのような規則はありますか?そうでない場合は、実際にはコンストラクタは必要ありません。

関連する問題