2016-03-31 13 views
-2

Ich verwende einen Code, den ich aus einer Online-Quelle für meinen Graphentheorie-Teil eines chemischen Modellierungsprojekts bekommen habe. Ich versuche, einen Sinn daraus zu machen. Was bedeutet die erste Zeile des Codes hinsichtlich der Entscheidung der Klasse insgesamt? Einer ist der erste Scheitelpunkt, zwei sind der zweite Scheitelpunkt der Klasse. Ich bin nicht sehr versiert in der Linearen Algebra/Diskrete Mathematik, also vermeide mathematisch intensive Erklärungen wenn möglich."(obj1.compareTo (obj2) <= 0)? Eins: zwei" Bedeutung?

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; 
} 

Vielen Dank!

+1

Das ist der [Bedingte Operator '? : '] (http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.25) auch als [ternary operator] bekannt (https: //en.wikipedia .org/wiki /% 3F :). –

Antwort

0

Nicht wirklich sicher, was Sie hier versuchen, aber die erste Zeile verwendet die Comparable Schnittstelle, die, egal was Vertex.getElement() zurückgibt, implementiert. Wenn das Element one "kleiner oder gleich" ist als das Element two, dann wird this Edge one auf die angegebene one gesetzt, andernfalls wird es auf two gesetzt. Die zweite Zeile setzt dann thistwo entsprechend (d. H. Wenn wir this.one = one dann this.two = two anderenfalls this.one = two und this.two = one entschieden haben).

2

Es ist schlecht geschrieben. Zwei Tests, wo man es tun würde, und fast absichtliche Dunkelheit. Es versucht nur, den kleineren Vertex one und den anderen two zuzuweisen, um die Kanten konsistent geordnet zu halten. Eine klarere Version wäre:

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

Zu viele Close-Parens in 'if' Aussage. Vorschlag (für Sie und alle Programmierer, die Code wie diesen schreiben): Fügen Sie einen Kommentar wie diesen vor 'if' statement hinzu:' // Weisen Sie Feldern zu, aber weisen Sie den Knoten mit dem niedrigsten Element dem Feld "one" 'zu. – Andreas

+0

@Andreas Ich bezweifle, dass ich das tun würde, es scheint mir klar genug zu sein. – EJP