2017-06-04 84 views
0

首先,我正在編寫程序,以可視化Android上的排序算法0​​我寫了插入排序算法的方法。我正在使用MPAndroidChart。android java insertsort使用ArrayList

void insertionSort(int[] arr) { 
    int i, j, newValue; 
    for (i = 1; i < arr.length; i++) { 
     newValue = arr[i]; 
     j = i; 
     while (j > 0 && arr[j - 1] > newValue) { 
      arr[j] = arr[j - 1]; 
      j--; 
     } 
     arr[j] = newValue; 
    } 
} 

...它工作正常。我想重新設計它以使用ArrayList獲得相同的結果,但不幸的是,它崩潰了,我不知道爲什麼!這是我的收集方法插入排序:

void insertionSort(ArrayList<BarEntry> list) { 
    int i, j; 
    float newValue; 
    for (i = 1; i < list.size(); i++) { 
     newValue = list.get(i).getY(); 
     j = i; 
     while (j > 0 && list.get(j-1).getY() > newValue) { 
      list.set(j, list.get(j-1)); 
      j--; 
     } 
     BarEntry be = list.get(list.indexOf(newValue)); 
     list.set(j, be); 
    } 
} 

BarEntry是用於創建圖表的類。我想通過它的Y座標對我的數據進行排序,我通過getY()函數做了什麼。程序關閉:

BarEntry be = list.get(list.indexOf(newValue)); list.set(j,be);

簡而言之: 如何可以替代

ARR [J] = NEWVALUE;

像這種徵收方式(不工作):

list.set(J,list.get(list.indexOf(NEWVALUE)));

+0

您是否收到異常消息?堆棧跟蹤? –

+0

不,我的應用程序剛剛重新啓動,當我點擊按鈕調出我的方法。 – d3st1ny

回答

1

你把newValue出從list.get(i),並且i至今沒有改變,所以我相信你可以做一遍:

BarEntry be = list.get(i); 

我沒有測試過。

我猜想發生了什麼事是:newValue是你正在移動的BarEntry的y值,它不是整個BarEntry。因此list.indexOf(newValue)未找到該元素並返回-1list.get(-1)不起作用。你的應用程序崩潰。

+0

謝謝!這是解決方案! – d3st1ny

+0

很高興知道。另請參閱[當某人回答我的問題時該怎麼辦?](https://stackoverflow.com/help/someone-answers)謝謝。 –

0

從Java文檔

public void add(int index, E element) 

插入在此列表中的指定位置的指定的元素。將當前位置的元素(如果有的話)和任何後續元素移到右側(將其中的一個添加到它們的索引)。

所以不需要移動數組的其餘部分。

+0

我不知道它應該如何幫助我。 – d3st1ny