ArrayList超出范围错误

时间:2014-01-24 04:22:02

标签: java sorting arraylist

我正在为课程构建程序,我在排序数组列表时遇到问题。我需要按照代码的值对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() );
}

有测试代码。

5 个答案:

答案 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()
}

像这样清理你的代码可以让你更好地了解正在发生的事情。

祝你好运!