我正在为课程构建程序,我在排序数组列表时遇到问题。我需要按照代码的值对arraylist的元素进行排序。
public static ArrayList<MenuItem> orderByCode( ArrayList<MenuItem> items ){
ArrayList<MenuItem> order=new ArrayList<MenuItem>(items.size());
for (int i = 0; i < items.size(); i++) {
for (int j = 1; j < (items.size() - i); j++) {
if ( order.get(i).getCode()<order.get(i-1).getCode()){
order.add(items.get(j-1));
order.set(j-1, order.get(j));
order.set(j, order.get(order.size()-1));
}
}
}
return order;
}
这是具有as = n问题的代码的一部分。如果您需要我添加课程的其余部分或我正在使用它来测试它,我可以这样做。
public static void main(String[] args){
ArrayList<MenuItem> items = new ArrayList<MenuItem>();
items.add( new MenuItem( "Big Bad Burger", 9.95, 2.15, 1, true ) );
items.add( new MenuItem( "Cheeky Chicken", 5.95, 0.75, 1, true ) );
items.add( new MenuItem( "Wild Wings", 5.95, 0.50, 0, true ) );
items.add( new MenuItem( "Flying Fish", 15.95, 7.61, 1, false ) );
items.add( new MenuItem( "Igloo Icecream", 1.95, 0.28, 2, true ) );
ArrayList<MenuItem> ordered = orderByCode( items );
// should list items in this order:
// Wings, Burger, Chicken, Fish, Icecream
for ( MenuItem item : ordered )
System.out.println( item.menuString() );
}
有测试代码。
答案 0 :(得分:2)
我猜你这条线会出错,
if ( order.get(i).getCode()<order.get(i-1).getCode()){
上面的行将抛出ArrayList超出i=0;
答案 1 :(得分:1)
学习使用调试器。这个问题应该很容易在调试器的帮助下发现,这样你才能知道哪一行导致了问题,以及那一刻变量的价值是什么。
无论如何,虽然我不知道你想要做什么,但这条线显然有问题:
if ( order.get(i).getCode()<order.get(i-1).getCode()){
对于i = 0,您将遇到order.get(i-1)
答案 2 :(得分:0)
检查项目的大小,因为我正在浏览项目arraylist,但是用于访问订单,您可能希望将其更改为
for (int i=0;i<order.size();i++)
祝你好运!
答案 3 :(得分:0)
此行需要修复
if (order.get(i).getCode() < order.get(i - 1).getCode())
答案 4 :(得分:0)
在迭代ArrayList时,创建一个迭代器。
Iterator<MenuItem> i = order.iterator();
while (i.hasNext())
{
MenuItem current = i.next();
// perform operations on current
}
或者,将您的ArrayList转换为数组,然后迭代它
MenuItem[] orderArray = order.toArray(new MenuItem[order.size()]);
for (int i = 0; i < orderArray.length; i++)
{
// perform operations on each order by using orderArray[i].relevantMethod()
}
像这样清理你的代码可以让你更好地了解正在发生的事情。
祝你好运!