2011-03-03 52 views
1

嗨 我已经在下面写了这样的代码,但它返回的错误输出不是最小值。返回最低成本!

private Element heuristic_Function(List<Element> objectList) { 
    System.out.println(objectList.toString()); 
    Element node =objectList.get(objectList.size() - 1); 
    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; 
} 

我发送一个列表给这个方法几次,但它会返回错误的输出。

输出:

[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); 

我的问题是:为什么它不返回其具有最小的贪婪(最小值)的节点? 感谢

+0

我的猜测是,你getGreedy方法是borked。 – duffymo 2011-03-03 21:12:52

+0

public void setGreedy(double greedy){ this.greedy = greedy; } – user472221 2011-03-03 21:14:10

+0

上面的代码是我的getGreedy()方法,没关系 – user472221 2011-03-03 21:14:33

回答

5

更换初始化函数Element node =objectList.get(0); 如下所示

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

谢谢你是对的! – user472221 2011-03-03 21:17:07

+0

您的问题是,您将leastValue初始化为来自第一个节点的值,而将节点初始化为最后一个节点。因此,如果第一个节点的值最小,那么大于测试的值永远不会为true,并且您从不更新节点,从而使其指向错误的节点。 – Jay 2011-03-03 22:41:25