我有一个ArrayList,我想做一个随机的东西来获取一个元素,删除那个元素并在没有删除元素的情况下再做一个随机的。我怎样才能做到这一点?我曾经尝试过,但它没有用。
感谢。
MainActivity:
MapView
答案 0 :(得分:4)
我知道你要做什么,但我建议采用不同的方法 - 将颜色放入列表中。
public enum Colors {
GREEN, RED, YELLOW;
}
...
List<Colors> list = new ArrayList<Colors>(Arrays.asList(Colors.values()));
...
public void button(View view) {
if (list.isEmpty()) {
textView.setText("Empty");
} else {
Random rand = new Random();
Colors randomElement = list.get(rand.nextInt(list.size()));
textView.setText(randomElement.name());
list.remove(randomElement);
}
}
答案 1 :(得分:2)
我认为您的问题是remove()
在ArrayList中重载。它可以采用索引(int)或Object。我相信你的remove
调用实际上是按索引删除的,当你想要的是按对象删除时。
要解决您的问题,我相信您应该能够remove(Integer.valueOf(randomElement))
明确调用remove(Object)
版本。
答案 2 :(得分:0)
在每个按钮函数调用中,random int获取当前可用列表大小的限制。因此,随机数将限制为数组列表中存在的元素的数量。
public void button (View view){
Random r = new Random();
int randomElement = list.get(r.nextInt(list.size()));
if (list.isEmpty()) {
textView.setText("Empty");
} else {
switch (randomElement) {
case 1:
textView.setText("Red");
list.remove(randomElement);
break;
case 2:
textView.setText("Blue");
list.remove(randomElement);
break;
case 3:
textView.setText("Yellow");
list.remove(randomElement);
break;
case 4:
textView.setText("Green");
list.remove(randomElement);
break;
}
}