【问题标题】:Next button randomly selects objects from array one at a time. How to go back for Previous button?下一个按钮一次从数组中随机选择一个对象。如何返回上一个按钮?
【发布时间】:2015-04-01 21:42:18
【问题描述】:
假设有一个对象数组在屏幕上显示内容。它们保存在通常通过 Next 和 Previous 按钮导航的数组中。通常,这些按钮只是根据是按下下一个按钮还是上一个按钮来为增量变量加或减一个。
如果用户选择“随机”,则每次按下“下一步”按钮时,计数器变量都会设置为随机数,因此会显示随机对象。在这种情况下,有没有一种简单的方法可以连接上一个按钮?
我正在使用 Java 开发 Android 应用程序。
【问题讨论】:
标签:
java
android
arrays
random
【解决方案1】:
在我看来,您需要保留访问过的索引的历史记录,因为用户可以轻松地以不可预测的顺序按下 Next 和 Random 按钮。每次按下 Next 或 Random 按钮时,使用 ArrayList 或类似的数据结构并将新索引添加到列表中。然后,Previous 按钮只需检索(并删除)列表中的最后一个索引。
【解决方案2】:
您必须跟踪随机函数生成的每个数组位置。
您可以创建一个 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()];
}
当然,迭代器中的第一个对象将是当前显示的对象,因此您可能想跳过那个。
如果您只想以后进先出的方式遍历列表,您也可以使用堆栈。
【解决方案3】:
保留前一个成员变量
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];
}
};
更复杂的版本会将最后一个压入堆栈,下一个并在上一个上弹出最后一个。一定要检查某个地方的计数器值是否良好(或者堆栈在弹出之前不为空)