2016-10-20 13 views
-4

これで、同じ名前のコンストラクタを複数作成しようとしています。私はエラーが発生していると私は理由がわからない。私は基本的には、プレイヤーが自分の名前を入力すると、彼らはサフィックスなどの特定のフィールドを入力しなくても、まだ動作するようにしようとしている私はまだsetterとgetterを後で追加する必要があることを知っていますが、私は今コンストラクタを設定しようとしています。なぜそれが私にエラーを与えているかについての任意のアイデア?同じコンストラクタ名エラー

public class Name { 
    private String firstName; 
    private String middleInitial; 
    private String lastName; 
    private String suffix; 


    public String playerName(String firstName, String middleInitial, String lastName, String suffix){ 

     this.firstName = firstName; 
     this.middleInitial = middleInitial; 
     this.lastName = lastName; 
     this.suffix = suffix; 
     return suffix + firstName + middleInitial + lastName; 
    } 

    public String playerName(String firstName, String lastName){ 

     this.firstName = firstName; 
     this.middleInitial = middleInitial; 
     this.lastName = lastName; 
     this.suffix = suffix; 
     return suffix + firstName + middleInitial + lastName; 
    } 

    public String playerName(String firstName, String middleInitial, String lastName){ //this is where the error is. "Duplicate method playerName (String String String) in type Name" 

     this.firstName = firstName; 
     this.middleInitial = middleInitial; 
     this.lastName = lastName; 
     this.suffix = suffix; 
     return suffix + firstName + middleInitial + lastName; 
    } 

    public String playerName(String firstName, String lastName, String suffix){//same error here 

     this.firstName = firstName; 
     this.middleInitial = middleInitial; 
     this.lastName = lastName; 
     this.suffix = suffix; 
     return suffix + firstName + middleInitial + lastName; 
    } 
+2

メソッドのシグネチャ少ない効率的が同じで何ができる...何あなたは同じことをする3つの方法がありますか? – Li357

+2

メソッドはコンストラクタではありません。 –

+0

それらのコンテンツは設定するだけです。後でその内容を変更します。私は、議論がすべて違うときに私にエラーを与えている理由を理解しようとしています。また、苦労しないでください。私はこれを初めて学び、まだ学んでいます。 – Zero

答えて

1

あなたは

obj.playerName ("string1", "string2", "string3"); 

を呼び出す方法のjavaこれは

public String playerName(String firstName, String middleInitial, String lastName) 

または

public String playerName(String firstName, String lastName, String suffix) 
+0

私はJavaがコンストラクタのオーバーロードを認識できたと思いましたか? – Zero

+0

お元気ですか?私に電話する意味は? –

+0

playerName()を呼び出すときに渡す引数に応じて、Javaはどのメソッドが正しく使用されるべきかを首尾よく選択できるはずです。 – Zero

0

であったかどうかを知っているだろうことは、あなたがエラーを持っているコンストラクタを取ることができますしていた場合

さて、これはあなたがそれらの両方における引数と同じ数の引数に同じのDATA TYPEを使用しているためである同じエラー

public String playerName(String firstName, String lastName, String suffix){ /* same error */ } 

を持っている別のものです。だから、ここでjavaはあなたがこれらのいずれかを使うときにどちらを呼び出すかを決めることができません。 これはあなたにとって今はっきりしていることを願っています...

+0

Ohhh okayy ...まあこれは理にかなっています。ありがとうございました!だから簡単な質問。プレイヤーがfirstName、middleInitial、およびlastNameをタイプすると、別のメソッドのfirstName、lastName、およびsuffixと区別されるように、コードを設定するにはどうすればよいですか?どのように私は正しい方法の間で選択できるように自分のコードを設定するのだろうか? – Zero

0

メソッド(またはコンストラクタ)をオーバーロードすると、型シグニチャが異なるメソッドしか持てません。従って、3つのパラメータをとる(同じ名前の)メソッドは1つのみです。ただし、現在コンストラクタはありません。あなたが本当に望んだと思うのは、Nameインスタンスを作成し、おそらくゲッターとセッターを持ち、最後にtoStringをオーバーライドすることでした。NameStringとして取得できます。方法はまったく同じです...何かのように、

public class Name { 
    private String firstName; 
    private String middleInitial = ""; 
    private String lastName; 
    private String suffix = ""; 

    public Name(String firstName, String lastName) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 

    public Name(String firstName, String middleInitial, String lastName) { 
     this(firstName, lastName); 
     this.middleInitial = middleInitial; 
    } 

    public Name(String firstName, String middleInitial, String lastName, 
       String suffix) { 
     this(firstName, lastName, middleInitial); 
     this.suffix = suffix; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getMiddleInitial() { 
     return middleInitial; 
    } 

    public void setMiddleInitial(String middleInitial) { 
     this.middleInitial = middleInitial; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public String getSuffix() { 
     return suffix; 
    } 

    public void setSuffix(String suffix) { 
     this.suffix = suffix; 
    } 

    @Override 
    public String toString() { 
     StringBuilder sb = new StringBuilder(); 
     sb.append(firstName); 
     if (sb.length() > 0) { 
      sb.append(' '); 
     } 
     if (middleInitial.length() > 0) { 
      sb.append(middleInitial).append(' '); 
     } 
     sb.append(lastName); 
     if (suffix.length() > 0) { 
      sb.append(' '); 
      sb.append(suffix); 
     } 
     return sb.toString(); 
    } 
} 

toStringString連結を実行している、とあなたは

@Override 
public String toString() { 
    String str = firstName; 
    if (str.length() > 0) { 
     str += " "; // <-- str = str + " "; 
    } 
    if (middleInitial.length() > 0) { 
     str += middleInitial + " "; 
    } 
    str += lastName; 
    if (suffix.length() > 0) { 
     str += " " + suffix; 
    } 
    return str; 
} 
+0

大丈夫です。うん、それは理にかなっている。しかし、これはクラスの割り当てです。私はStringBuilderが何をしたり追加したりしたかについては学んでいません。したがって、私は自分のコードでそれを使用することはできません。他の選択肢はありますか? – Zero

+0

大丈夫です。どうもありがとうございます! – Zero