2016-03-31 8 views
-2

化学モデリングプロジェクトのグラフ理論部分のオンラインソースから得たコードを使用しています。私はこれを理解しようとしています。最初のコード行は、そのクラスの決定が全体的に1つの意味でどういう意味ですか? 1つは最初の頂点、2つはクラスの2番目の頂点です。私はLinear Algebra/Discrete Mathに精通していませんので、可能であれば数学的に強い説明は避けてください。"(obj1.compareTo(obj2)<= 0)?one:2"意味?

public Edge(Vertex one, Vertex two, int length){ 
    this.one = (one.getElement().compareTo(two.getElement()) <= 0) ? one : two; 
    this.two = (this.one == one) ? two : one; 
    this.length = length; 
} 

ありがとうございます!

+1

これは[条件付き演算子? :[](http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.25)([3次演算子]とも呼ばれます)(https://en.wikipedia .org/wiki /%3F :)。 –

答えて

0

あなたがここで何をしようとしているのかわかりませんが、最初の行はVertex.getElement()が返す、Comparableインターフェイスを使用しています。 oneの要素がtwoの要素より小さいか等しい場合、thisのエッジのoneは、指定されたoneに設定されます。それ以外の場合は、twoに設定されます。 2行目は、次に設定に応じthistwo(すなわち、我々は次にthis.two = twoさもなければthis.one = twothis.two = onethis.one = oneを決定した場合)。

2

これは下手に書かれています。人がやることができる2つのテスト、そして曖昧さをほとんど熟考します。小さい方の頂点をoneに割り当て、もう1つをtwoに割り当てようとしているので、エッジを一貫して並べることができます。より明確なバージョンは次のようになります:

public Edge(Vertex one, Vertex two, int length) 
{ 
    if (one.getElement().compareTo(two.getElement()) <= 0) 
    { 
     this.one = one; 
     this.two = two; 
    } 
    else 
    { 
     this.one = two; 
     this.two = one; 
    } 
    this.length = length; 
} 
+0

'if'文にクローズドパレンシが多すぎます。提案(あなたとこのようなコードを書いているすべてのプログラマー):if文の前に次のようにコメントを追加します: '//フィールドに割り当てますが、最も低い要素の頂点をフィールド" one "に割り当てます。 – Andreas

+0

@アンドレアス私はそれをやるとは思っていません。 – EJP

関連する問題