2017-06-04 12 views
0

まず、ソートアルゴリズムをAndroidで視覚化するプログラムを作成しています。 挿入ソートアルゴリズムのメソッドを書きました。私はそれのためにMPAndroidChartを使用しています。ArrayListを使用したandroid java insertsort

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を使用して同じ結果を得るために再設計したいのですが、残念ながらクラッシュしてしまいます。理由はわかりません。これはコレクションアプローチです.Sort:

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に))); Javaのドキュメントから

+0

例外メッセージが表示されますか?スタックトレース? –

+0

いいえ、私のアプリは単に私のメソッドを呼び出すボタンをクリックすると再起動しています。 – d3st1ny

答えて

1

BarEntry be = list.get(i); 

私がテストしていません。

私は起こったと思われた:newValueBarEntryからyの値だったあなたは動いている、それは全体ではないBarEntry。したがってlist.indexOf(newValue)は要素を見つけず、-1を返します。 list.get(-1)は機能しません。あなたのアプリはクラッシュします。

+0

ありがとうございます!それが解決策でした! – d3st1ny

+0

素晴らしいことを知っています。 [私の質問に誰かが答えたとき、どうすればいいですか?](https://stackoverflow.com/help/someone-answers)もご覧ください。 –

0

public void add(int index, E element) 

挿入し、このリスト内の指定された位置に指定された要素。現在その位置にある要素(存在する場合)とそれに続く要素を右にシフトします(インデックスに1を加えます)。

したがって、残りの配列をシフトする必要はありません。あなたがlist.get(i)から出newValueを取り、iは以降変更されていないので、私はあなただけで再びそれを行うことができると信じて

+0

私はそれがどのように私を助けてくれるのか分かりません。 – d3st1ny

関連する問題