私はあなたが私はあなたがまだその端には明らかではないかもしれません推測する「それがどのように機能するか」尋ねるあなたの質問の一部に理解を表明見ていないとして。私は、答えの中のあなたのコメントにも基づいて、コードの背後にある「論理」を理解していないことを知っています。
compareTo
を実装するための適切な方法であると私が信じているように、Mark Rotteveelの例を論理的に説明します。
public int compareTo(First other){
if (eId < other.getEId()){
return -1;
} else if (eId > other.getEId()){
return +1;
} else {
return 0;
}
}
我々はタイプFirst
の対象となるパラメータのメソッドcompareTo
テイク持っている - あなたが作成したクラスです。この型には、このクラスに含まれているすべてのプロパティが含まれます(たとえば、getEId
メソッドを使用すると、クラスFirst
内にあるプライベートグローバル変数eId
を返すことができます)。
は今、事は
compareTo
でこの
other
パラメータは、それが
自身First
オブジェクトのインスタンスはなく、あなたが
compareTo
メソッド内(:
if (eId < other.getEId())
この部分)と比較されているものと同じですです。
compareTo
メソッド内
我々はcompareTo
メソッドに引数として渡されたFirst
オブジェクト用に作成されたeId
に(あなたの現在のグローバル変数eId
をいう)eId
かどうかを確認するためのif-else文を使用します。したがって、これらの2つは同じ値ではないです。
が
public First(int eId, String eName){
this.eId = eId;
this.eName = eName;
}
あなたは、その後のような2つの異なるFirst
オブジェクトを行うことができます:
あなたはそれのプログラミングと思うこのように新しいしていると述べたよう
は、あなたがコンストラクタを持つクラスFirst
を作りましたこの例では
First obj1 = new First(5, "Object 1");
First obj2 = new First(12, "Object 2");
obj1
とobj2
はない同じオブジェクト、及びinherentlありますyは異なるeId
値を持っています。 compareTo
メソッドに渡したものは、例えば、obj2
である可能性があります。これは現在比較しているものとは異なります。
我々はこのcompareTo(obj2)
のようにメソッドにobj2
を渡すときに、これはother.getEId
を読み取るコードの一部に到達したとき、それは明らかに、if文の内側にeId
とは異なるeId
を返すことになるobj2.getEId
を実行することを意味します。この例では、 'obj2.getEId
'は整数12を返します。これは、eId
をobj2
の12として設定しているためです。
コードの残りの部分eId
現在、return -1
、整数の面であまり価値があると比較されている場合else if
に上下に移動したりするreturn +1
その大きなのif-else文は、非常に簡単ですでeId
に従って並べ替えます。他の場合は0を返します。その場合、それらはeId
という点で等しくなるからです。
compareTo
内で比較されたeId
のインスタンスがどのように異なるのかについて、コードを少し明確にしたいと考えています。
私はあなたのopの炎を取り除きました。それは質問に答えなかったし、あなたの実際の答えから気をそらすように役立つだけです。将来的には、質問の不備を指摘するためにコメントを使用し、[すばらしい]ことを覚えておいてください(http://stackoverflow.com/help/be-nice)。 –
次回はコードを編集してくれてありがとうございます。プログラミング初心者の方は、あなたのロジックの仕組みを説明してください。 – Digs