Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ListIterator从列表中删除项_Java_Arrays_String_List - Fatal编程技术网

Java 使用ListIterator从列表中删除项

Java 使用ListIterator从列表中删除项,java,arrays,string,list,Java,Arrays,String,List,代码: Random Picker=new Random(); 列表=新的ArrayList(); 列表。添加(“卡片1”); 列表。添加(“卡片2”); 列表。添加(“卡片3”); ListIterator ListIterator=list.ListIterator(); 字符串c1、c2、c3; c1=list.get(Picker.nextInt(list.size()); remove(); 执行此操作时,会出现java错误。我试图做的是将c1设置为list.get(Picker.n

代码:

Random Picker=new Random();
列表=新的ArrayList();
列表。添加(“卡片1”);
列表。添加(“卡片2”);
列表。添加(“卡片3”);
ListIterator ListIterator=list.ListIterator();
字符串c1、c2、c3;
c1=list.get(Picker.nextInt(list.size());
remove();
执行此操作时,会出现java错误。我试图做的是将c1设置为
list.get(Picker.nextInt(list.size())

然后从列表中删除选中的卡。换句话说,我希望字符串c1从列表中随机选取,然后它选取的卡片将从列表中删除,但保留在值c1中。我可以想象我当前的代码不起作用,因为当我删除它拾取的内容时,它也会从字符串c1中删除卡。我不知道如何正确执行此操作。

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

每次呼叫下一个或上一个时,只能进行一次此呼叫。只有在上次调用next或previous后未调用ListIterator.add时,才能执行此操作

这意味着,如果不调用迭代器上的
next()
来获取第一个元素,您仍然处于非法状态

无论如何,根本不需要使用迭代器。
List
中的
remove(int index)
方法将实现以下功能:

 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();

我同意杰克的看法。此外,您还可以通过调用
Collections.shuffle(list)
使用
Random
类进行替换。顾名思义,它将为您随机排列您的列表。然后,使用
listIterator
可以遍历列表并选择您的卡,将它们存储在另一个列表中。它看起来像:

String c1 = list.remove(rand.nextInt(list.size));
List List=new ArrayList();
列表。添加(“卡片1”);
列表。添加(“卡片2”);
列表。添加(“卡片3”);
集合。洗牌(列表);
ListIterator ListIterator=list.ListIterator();
List pickedCards=new ArrayList();
while(listIterator.hasNext()){
pickedCards.add(listIterator.next());
}
字符串c1=拾取的卡。获取(0);
字符串c2=pickedCards.get(1);
字符串c3=pickedCards.get(2);

c1、c2和c3的值现在类似于
“card2”
“card1”
,和
“card3”

谢谢,我是java新手。不管我怎么做,我实际上是想把c1设置为列表中的一个随机字符串,然后从列表中删除该字符串,但将c1保留为拾取的字符串。换句话说,假设在我的列表中,选择的一个字符串表示“hi”-c1将被设置为“hi”,然后字符串“hi”将从列表中删除,但c1仍将被设置为它。
List<String> list = new ArrayList<String>();
list.add("card1");
list.add("card2");
list.add("card3");

Collections.shuffle(list);

ListIterator<String> listIterator = list.listIterator();
List<String> pickedCards = new ArrayList<String>();

while(listIterator.hasNext()) {
    pickedCards.add(listIterator.next());
}

String c1 = pickedCards.get(0);
String c2 = pickedCards.get(1);
String c3 = pickedCards.get(2);