java - 使用 ListIterator 从列表中删除项目

标签 java arrays string list

代码:

 Random Picker = new Random();
 List<String> list = new ArrayList<String>();
  list.add("card1");
  list.add("card2");
  list.add("card3");


  ListIterator listIterator = list.listIterator();
  String c1, c2, c3;
  c1 = list.get(Picker.nextInt(list.size()));
  listIterator.remove();

执行此操作时,我收到 java 错误。我想做的是将 c1 设置为 list.get(Picker.nextInt(list.size())); 然后从列表中删除所选的卡。换句话说,我希望字符串 c1 从列表中随机选择,然后将其选择的卡从列表中删除,但保留在值 c1 中。我想我当前的代码不起作用,因为当我删除它所选择的内容时,它也会从字符串 c1 中删除该卡。我不知道如何正确执行此操作。

最佳答案

您没有使用迭代器从集合中删除元素。您正在从刚刚实例化的迭代器中调用删除。如果你看ListIterator您将看到文档remove :

This call can only be made once per call to next or previous. It can be made only if ListIterator.add has not been called after the last call to next or previous.

这意味着,无需调用 next()在迭代器上获取第一个元素,您仍然处于非法状态。

无论如何,根本不需要使用迭代器。 remove(int index)方法来自List<E>就可以了:

String c1 = list.remove(rand.nextInt(list.size));

关于java - 使用 ListIterator 从列表中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12487915/

相关文章:

java - 如何用空格拆分字符串并将任何内容单独留在引号内?

java - LibGDX 让世界移动,但玩家不动

java - 如何确定Java线程的行为

JavaScript:如何将具有嵌套数组的对象映射到 React 表

python - 如何删除 "similar"但 MySQL 数据库中不相同的内容

Java:将字符串方程拆分为数字和运算符

java - 如何让 RESTEasy 理解静态资源?

java - 进程生成器导致 error2 即使命令从 cmd 运行也找不到指定的路径

javascript - 为每个唯一日期获取数据的第一个值到数组中

c++ - 但是将内存转换为字节数组?