下一个按钮一次从数组中随机选择对象。如何返回上一步按钮?

时间:2015-02-02 20:38:02

标签: java android arrays random

假设有一组对象在屏幕上显示内容。它们保存在一个通常通过“下一个”和“上一个”按钮导航的数组中。通常,按钮只是向增量变量添加或减去一个,具体取决于是否按下了下一个或上一个按钮。

如果用户选择"随机,"每次按下“下一步”按钮时,计数器变量都会设置为随机数,因此会显示随机对象。在这种情况下,是否有一种简单的方法可以连接Previous按钮?

我正在使用Java购买Android应用。

3 个答案:

答案 0 :(得分:0)

听起来我需要保留访问索引的历史记录,因为用户可以轻松地按不可预测的顺序按下Next和Random按钮。每次按下Next或Random按钮时,使用ArrayList或类似的数据结构并将新索引添加到列表中。然后,上一个按钮只需要检索(并删除)列表中的最后一个索引。

答案 1 :(得分:0)

您必须跟踪随机函数生成的每个数组位置。

您可以创建一个LinkedList来保存正在显示的每个数组索引值。

类似的东西:

LinkedList<Integer> indexOrder = new LinkedList<Integer>();

// Each time you access a random index in the array, store it in the list:
indexOrder.add(rand);

然后,当您想要获取前一个元素时,您可以使用descendingiterator在列表中向后迭代。

Iterator<Integer> iterator = indexOrder.descendingiterator();
// Then to iterate through the previous objects in your content-array:
while(iterator.hasNext()){
    Object previousObject = contentArray[iterator.next()];
}

当然,迭代器中的第一个对象将是当前显示的对象,因此您可能希望跳过该对象。

如果您只想以后进先出的方式遍历列表,也可以使用堆栈。

答案 2 :(得分:0)

保留先前的成员变量

private Object[] array;
private int counter;
private int last;
...
private View.OnClickListener mButtonNextListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        last = counter++
        Object object = array[counter];
        //do whatever
    }
};

private View.OnClickListener mButtonPreviousListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        counter = last;
        Object object = array[counter];
    }
};

一个更复杂的版本会将最后一个推送到下一个堆栈并在前一个上弹出最后一个。一定要检查计数器值是否在某处(或者在弹出之前堆栈不为空)