如何从ArrayList中删除随机元素

时间:2018-02-08 17:09:41

标签: java android arraylist random

我有一个ArrayList,我想做一个随机的东西来获取一个元素,删除那个元素并在没有删除元素的情况下再做一个随机的。我怎样才能做到这一点?我曾经尝试过,但它没有用。

感谢。

MainActivity:

MapView

3 个答案:

答案 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;
    }
  }