2016-03-31 3 views
-2

J'utilise un code que j'ai obtenu d'une source en ligne pour ma partie théorie des graphes d'un projet de modélisation chimique. J'essaie de donner un sens à cela. Qu'est-ce que la première ligne de code signifie en ce qui concerne la décision de la classe dont une globale? L'un est le premier sommet, deux est le deuxième sommet de la classe. Je ne suis pas très versé dans l'algèbre linéaire/mathématiques discrètes, donc évitez les explications mathématiquement intenses si possible."(obj1.compareTo (obj2) <= 0)? Un: deux" sens?

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

Merci!

+1

C'est l'opérateur conditionnel '? : '] (http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.25) aussi connu comme un [opérateur ternaire] (https: //en.wikipedia .org/wiki /% 3F :). –

Répondre

0

Pas vraiment sûr de ce que vous essayez de faire ici, mais la première ligne utilise l'interface Comparable qui, quel que soit Vertex.getElement() renvoie, implémente. Si l'élément one est inférieur ou égal à l'élément two, thisone est défini sur one, sinon il est défini sur two. La deuxième ligne définit ensuite this en conséquence two (c'est-à-dire si nous avons décidé this.one = one puis this.two = two sinon this.one = two et this.two = one).

2

Il est mal écrit. Deux tests où l'on ferait, et l'obscurité presque délibérée. Il essaie juste d'assigner le moindre sommet à one et l'autre à two, afin de garder les arêtes ordonnées de façon constante. Une version plus claire serait:

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

Trop de parens proches dans l'instruction 'if'. Suggestion (pour vous et tous les programmeurs écrivant le code comme ceci): Ajoutez un commentaire comme ceci avant l'instruction 'if':' // Assignez aux champs, mais assignez le sommet avec l'élément le plus bas au champ "un" '. – Andreas

+0

@Andreas je doute que je ferais cela, il me semble assez clair. – EJP