2015-02-24 68 views
1

这种插入排序功能应该将Drink对象数组并入,并根据它们的一个属性(成本)进行排序。该属性由getCost()获取。我不断收到NullPointer错误。代码如下:插入排序功能

public void sortDrinks(Drink[] drinks){ 
    for(int i = 1; i <= drinks.length; i++){ 
     Drink key = drinks[i]; 
     int count = i-1; 
     while((count >= -1)&&(drinks[count].getCost() > key.getCost())){ 
      drinks[count+1] = drinks[count]; 
      count--; 
     } 

     drinks[count+1] = key; 
    } 

} 

回答

1

当计数等于-1,您尝试访问的饮品[的getcost方法 - 1]。如果将“count count> = -1”更改为“while count> -1”,我相信这会得到解决。

这显然需要少量的重组,因为饮料然后插入正确的地方。

+0

需要什么样的重组?我需要-1作为标志,这意味着在当前的比较中,数字被排序,直到count和i被重新分配为止。 – 2015-02-24 01:40:46

+1

我可能错过了重组。在这种情况下,当循环以count == 0开始时,它以count == -1退出。如果您的测试条件为count> = -1,则它再次测试true,最终计数== -2。如果您只是将> =更改为>,那么它应该可以工作。 – cassm 2015-02-24 01:54:10

+0

我做了,不幸的是它仍然失败,并且在同一条线上,while条件行。对于这不起作用,我非常困惑。 – 2015-02-24 01:55:53

1

为什么不在您的Drink类中实现可比较的接口?

public class Drink implements Comparable<Drink> { 

    // attributes and constructor 

    public int getCost() { 
     return cost; 
    } 

    public int compareTo(Drink other) { 
     return getCost().compareTo(other.getCost()); 
    } 
} 

再后来就可以排序是与通过饮料对象数组:

Collections.sort(drinks); // returns the sorted drinks