【问题标题】:android java insertsort using ArrayList使用ArrayList的android java插入排序
【发布时间】:2017-11-05 10:39:05
【问题描述】:

首先,我正在编写程序来可视化 Android 上的排序算法 我写了插入排序算法的方法。我正在使用 MPAndroidChart。

    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 获得相同的结果,但不幸的是,它崩溃了,我不知道为什么!这是我的集合方法insertionSort:

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 = list.get(list.indexOf(newValue)); list.set(j, be);

简而言之: 我该如何替代

arr[j] = newValue;

这样的收集方法(不工作):

list.set(j, list.get(list.indexOf(newValue)));

【问题讨论】:

  • 您是否收到异常消息?堆栈跟踪?
  • 不,当我单击调用我的方法的按钮时,我的应用程序刚刚重新启动。

标签: java android algorithm sorting arraylist


【解决方案1】:

你把newValuelist.get(i)中去掉了,而i从那以后就没有改变过,所以我相信你可以再做一次:

    BarEntry be = list.get(i);

我没有测试过。

我想发生的事情是:newValue 是您正在移动的 BarEntry 的 y 值,而不是整个 BarEntry。所以list.indexOf(newValue) 没有找到元素并返回-1list.get(-1) 不起作用。您的应用崩溃了。

【讨论】:

【解决方案2】:

来自java文档

public void add(int index, E element)

在此列表中的指定位置插入指定元素。将当前位于该位置的元素(如果有)和任何后续元素向右移动(将它们的索引加一)。

所以不需要移动数组的其余部分。

【讨论】:

  • 我不知道它应该如何帮助我。
猜你喜欢
  • 2016-02-29
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多