Agustin Val
Agustin Val

Reputation: 187

How to delete a random element from a ArrayList

I have an ArrayList and i want to do a random to get a element, delete that element and make another random without that deleted element. How can i do that? I had tried but it doesn't work.

Thanks.

MainActivity:

public class MainActivity extends AppCompatActivity {

    Button button;
    TextView textView;

    ArrayList<Integer> list = new ArrayList<Integer>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = (Button)findViewById(R.id.button);
        textView = (TextView)findViewById(R.id.textView);

        list.add(0);
        list.add(1);
        list.add(2);
        list.add(3);

    }

    public void button(View view) {
        Random rand = new Random();
        int randomElement = list.get(rand.nextInt(list.size()));
        if (list.isEmpty()) {
            textView.setText("Empty");
        } else if (randomElement == 0) {
            textView.setText("Red");
            list.remove(randomElement);
        } else if (randomElement == 1) {
            textView.setText("Blue");
            list.remove(randomElement);
        } else if (randomElement == 2) {
            textView.setText("Yellow");
            list.remove(randomElement);
        } else if (randomElement == 3) {
            textView.setText("Green");
            list.remove(randomElement);
        }
    }
}

Upvotes: 0

Views: 1846

Answers (3)

Shadov
Shadov

Reputation: 5592

I know what you are trying to do, but I suggest a different approach - put colors into the list instead.

public enum Colors {
    GREEN, RED, YELLOW;
}

...

List<Colors> list = new ArrayList<Colors>(Arrays.asList(Colors.values()));
Random rand = new Random();

...

public void button(View view) {
    if (list.isEmpty()) {
        textView.setText("Empty");
    } else {
        Colors randomElement = list.remove(rand.nextInt(list.size()));
        textView.setText(randomElement.name());
    }
}

Upvotes: 5

Solomon Richards
Solomon Richards

Reputation: 69

On every button function call, the random int gets a limit of the currently available list size. So the random number will be limit to the no of elements present in the array list.

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

Upvotes: 0

cwbowron
cwbowron

Reputation: 1025

I think your problem is that remove() is overloaded in ArrayList. It can take either an index (int) or an Object. I believe your remove call is actually removing by index, when what you want is to remove by object.

To solve your problem, I believe you should be able to do remove(Integer.valueOf(randomElement)) to explicitly call the remove(Object) version.

Upvotes: 2

Related Questions