2017-09-17 5 views
-3

こんにちは私はHal9000を作成している課題に取り組んでいます。私はこのコードを作成しました:"エラー:Hal9000クラスのコンストラクタHal9000は与えられた型には適用できません;

/** 
* Hal9000 simulate an AI that interacts with the crew 
* of a space ship. 
* 
*/ 
public class Hal9000 
{ 
    private String name; 
    /** 
    * @return returns the name of the crew member. 
    */ 
    public String getName() 
    { return name; 
    } 
    /** 
    * Sets a new crew name @param for the crew member 
    */ 
    public void setName(String newName) 
    { String name = newName; 
    } 
    /** 
    * Hal greets the crew member. 
    */ 
    public String greetCrewMember() 
    { return "Welcome," + name; 
    } 
    /** 
    * @return returns a string consisting of "I am sorry,name, I can't + whatToDo" 
    * where name is the crew member's name. 
    */ 
    public String doCommand(String whatToDo) 
    { return "I am sorry,"+ name + ". I can't" +whatToDo; 
    } 
} 

また、コードをテストする別のクラスがあります。私は先生のコードチェッカーに私のコードを提出するとき私はこの1つを編集することはできません。 「 /tmp/codecheck/17091723282490386346565379553/submission/Hal9000Tester.java:5:エラー:私のエラーを取得最初のコードについて

public class Hal9000Tester 
{ 
    public static void main(String[] args) 
    { 
     Hal9000 hal = new Hal9000("Dave"); 
     System.out.println(hal.greetCrewMember()); 
     System.out.println("Expected: Welcome, Dave"); 
     System.out.println(hal.doCommand("engage drive")); 
     System.out.println("Expected: I am sorry, Dave. I can't engage drive"); 
     hal.setName("Aruna"); 
     System.out.println(hal.doCommand("power down")); 
     System.out.println("Expected: I am sorry, Aruna. I can't power down"); 
    } 
} 

クラスHAL9000におけるコンストラクタHAL9000は、与えられたタイプに適用することができない。

Hal9000 hal = new Hal9000("Dave"); 
       ^

必要ありません:引数 が見つかりました:文字列 理由:実際の正式引数リストが長 1エラーが異なる 「

コーディングが新しくなりました(これは私の最初のコースです)、問題の内容や修正方法がわかりません。読んでくれてありがとう、私はあなたが私を助けることを願っています

+0

ちょうどメモ、あなたはおそらく '復帰 'を歓迎します。' + name'(最後のスペース)では 'return'ではなく' + name'です。 「申し訳ありません」、「私はできません」と同じです。 – Xenon

答えて

0

クラスにはコンストラクタが必要です。 Hal9000Testernew Hal9000("Dave")を使用する場合、Hal9000というHal9000というメソッドを探します。このメソッドは、Stringをパラメータにとります。

デフォルトでは、コンストラクタを宣言していないクラスは、コンパイラによって追加されたコンストラクタメソッドを取得します。追加されたコンストラクターには、エラーの原因となるパラメーターはありません。

public class Hal9000 { 

    // ... 

    public Hal9000(String nameOfCrewMember){ 
     this.setName(nameOfCrewMember); 
    } 

    // ... 

} 

はまた、あなたのsetNameが実際に乗務員の名前を設定しません

は、次のようなものが必要。ローカル変数を作成するだけです。

次のようなものが必要です。[ここ](Javaのドキュメント)

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

コンストラクタの一部の情報を(https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

0

あなたの問題は、あなたがオブジェクトのインスタンスを作成しようとしているということです。まだ正しいパラメータでコンストラクタを設定していません。

public Hal9000(String name) 
{ 
    setName(name); 
} 

このようにすると、コードを実行することができます。あまりにも多くのコードを作成しようとする前に、オブジェクト指向プログラミングがどのように機能するかについてもっと学ぶことをお勧めします。 Javadocはこのための良いリソースを持っていますhere

関連する問題