2011-03-03 3 views
1

Salut J'ai écrit un tel code ci-dessous mais il renvoie une mauvaise sortie qui n'est pas la moindre valeur. J'envoie une liste à cette méthode plusieurs fois mais elle retournera une mauvaise sortie.retournant le moindre coût!

sortie:

[digit:1 greedy2.87 , digit:2 greedy3.67 ,digit:3 greedy3.24 , digit:4 greedy3.67 ] //System.out.println(objectList.toString()); 
2.87 //System.out.println(leastValue); 
digit:4 greedy3.67 //System.out.println(node.toString()); 
2.87 //System.out.println(leastValue); 


[digit:1 greedy2.87 , digit:2 greedy3.67 , digit:3 greedy3.24 , digit:1 greedy3.67 , digit:2 greedy4.47 , digit:3 greedy4.3500000000000005 ] // System.out.println(objectList.toString()); 

2.87 //System.out.println(leastValue); 
digit:3 greedy4.3500000000000005 //System.out.println(node.toString()); 
2.87 //System.out.println(leastValue); 

Ma question est: pourquoi il ne retourne pas le nœud qui a le moins gourmand (valeur moins)? grâce

+0

Je pense que votre méthode getGreedy est complètement foireuse. – duffymo

+0

public void setGreedy (double gourmand) { this.greedy = gourmand; } – user472221

+0

le code ci-dessus est ma méthode getGreedy() qui est ok – user472221

Répondre

5

remplacer la fonction d'initialisation à Element node =objectList.get(0); comme montré ici

private Element heuristic_Function(List<Element> objectList) { 
    System.out.println(objectList.toString()); 
    Element node =objectList.get(0); // REPLACE WITH THIS 
    double leastValue = objectList.get(0).getGreedy(); 
    System.out.println(leastValue); 

    for (Element e : objectList) { 


     if (leastValue > e.getGreedy()) { 


      leastValue = e.getGreedy(); 
      node = e; 
     } 

    } 
    System.out.println(node.toString()); 
    System.out.println(leastValue); 
    return node; 
} 
+0

merci vous avez raison !! – user472221

+0

Votre problème était que vous initialisiez leastValue à la valeur du premier nœud, mais le nœud au dernier nœud. Donc, si le premier nœud a la plus petite valeur, le plus grand que test n'est jamais vrai, et vous ne mettez jamais le nœud à jour, le laissant ainsi pointer vers le mauvais nœud. – Jay