2015-11-29 4 views
-1

У меня есть arraylist, заполненный случайными целыми числами. Я пытаюсь использовать сортировку вставки для сортировки, а затем распечатывать их на экране. Все работает, но сортировка вставки ... Не уверен, что не так, может кто-то взглянуть на нее и найти, что пошло не так ... Спасибо.Вставка Сортировка Неверный

public static ArrayList<Integer> oh = new ArrayList<Integer>(); 

public static ArrayList<Integer> gen2() 
{ 
    ArrayList<Integer> oh = new ArrayList<Integer>(); 
    Random random = new Random(); 
    for (int i = 0; i < 100; i++) 
    { 
     oh.add(random.nextInt()); 
    } 
    return oh; 
} 

public static ArrayList<Integer> insertionSort(ArrayList<Integer>oh) { 
    int i, j; 
    for (i = 1; i < oh.size(); i++) { 
     Integer tmp = oh.get(i); 
     j = i; 
     while ((j > 0) && (oh.get(j - 1).intValue() > tmp.intValue())) { 
      oh.set(j, oh.get(j - 1)); 
      j--; 
     } 
     oh.set(j, tmp); 
    } 
    return oh; 
} 

public static void main(String[] args) 
{ 
    System.out.println("Original List:"); 
    System.out.println(gen2()); 
    System.out.println("Sorted Arraylist:"); 
    System.out.print(insertionSort(oh)); 
} 

ответ

2

Вы затеняете переменную oh.

Внутри метода Gen2, преобразовываются

ArrayList<Integer> oh = new ArrayList<Integer>(); 

Для этого

oh = new ArrayList<Integer>(); 

Причина это не работает, потому что вы объявили новый ArrayList (названный ой), чья сфера просто внутри метода gen2. Удаление ArrayList приводит к назначению нового массива ArrayList исходному классу oh reference.

+0

Большое вам спасибо! – user5344755

+1

@ user5344755: В Eclipse (и, возможно, в других IDE: s также) есть настройки, которые позволяют предупреждать об этом случае, когда вы затеняете поле локальной переменной. Это действительно помогает много раз! Параметр, расположенный в настройках -> Java -> Компилятор -> Ошибка/Предупреждения -> Затенение и конфликты имен. – Lii

+0

@lii Спасибо, я этого не знал! – user5344755

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