Reputation: 187
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
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
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
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