2014-01-24 4 views
0

Я создаю программу для класса, и у меня возникла проблема с сортировкой списка массивов. Мне нужно, чтобы элементы 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; 
} 

Это часть кода, имеющего проблему = 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()); 
} 

Есть код проверки.

+3

Это беспорядок - у вас есть два вложенных цикла, и неясно, что вы пытаетесь сделать. Кроме того, переменная 'j' (внутренний цикл) никогда не используется. Еще одна вещь: если вы хотите сортировать коллекцию, реализуйте 'сопоставимые' и используйте' Collections.sort() 'или' Arrays.sort() ' – alfasin

+0

Можем ли мы знать, какова цель этого метода? –

+0

В вашем коде 'j' не используется вообще. –

ответ

0

проверка размера элементов, для я собираюсь через пункты ArrayList, но используюсь для доступа заказа, вы можете захотеть изменить что

for (int i=0;i<order.size();i++) 

удачи!

1

Научитесь использовать отладчик. Такая проблема должна быть легко выявлена ​​с помощью отладчика, чтобы вы знали, какая строка вызывает проблему, и каково значение переменных с этого момента.

Во всяком случае, хотя я понятия не имею, что вы пытаетесь сделать, это линия, очевидно, такая проблема:

if (order.get(i).getCode()<order.get(i-1).getCode()){ 

Для я = 0, вы будете иметь проблемы для order.get(i-1)

+0

Да. Это классическая проблема, решаемая отладчиком. Если вы используете eclipse, есть один встроенный! –

+0

Я использую eclipse. Это показывает мне линии, в которых у меня возникают проблемы. Я просто не знаю, как это исправить. – Hefflon

2

Я думаю, вы получаю сообщение об ошибке для этой линии,

if (order.get(i).getCode()<order.get(i-1).getCode()){ 

Над линии выбросит ArrayList из связанных ошибок для i=0;

0

Эта линия должна быть исправлена ​​

if (order.get(i).getCode() < order.get(i - 1).getCode()) 
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() 
} 

Очистка кода, как это позволит вам лучше понять, что происходит.

Удачи вам!

Смежные вопросы