2012-09-19 4 views
0

코드를 사용하여 목록에서 항목을 제거 :는 반복자

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

이 일을 할 때 나는 자바 오류가 발생합니다. 내가하려는 일은 c1을 list.get(Picker.nextInt(list.size())); 으로 설정 한 다음 목록에서 선택한 카드를 제거하는 것입니다. 즉, 문자열 c1을 목록에서 무작위로 선택한 다음 목록에서 제거하도록 선택한 카드에 대해 값 c1을 유지하려고합니다. 나는 내가 선택한 것을 제거 할 때 문자열 c1에서 카드를 제거하기 때문에 현재 코드가 작동하지 않는다고 생각합니다. 이 작업을 올바르게 수행하는 방법을 모르겠습니다.

+0

오류가 무엇처럼? – kosa

+0

고마워, 나는 자바를 처음 사용한다. 내가 본질적으로하고 싶은 것은, 어떻게하는지에 관계없이, c1을 목록에서 임의의 문자열로 설정 한 다음 목록에서 문자열을 제거하지만 c1을 선택된 문자열로 유지하는 것입니다. 즉, 내 목록에서 하나의 문자열이 "hi"라고 말하면 - c1은 "hi"로 설정되고 문자열 "hi"는 목록에서 제거되지만 c1은 여전히이 문자열로 설정됩니다 . – User093203920

답변

1

이터레이터를 사용하여 컬렉션에서 요소를 제거하지 않습니다. 인스턴스화 된 iterator에서 remove를 호출하고있다. 당신이 ListIterator 설명서를 보면 당신은 remove 것을 자체됩니다

이 호출은 다음 또는 이전에 한 번 호출 당 할 수있다. next 또는 previous의 마지막 호출 후에 ListIterator.add가 호출되지 않은 경우에만 호출이 가능합니다.

즉, 이터레이터에서 next()을 호출하지 않아도 첫 번째 요소를 가져 오면 여전히 잘못된 상태입니다.

어쨌든 iterator를 사용할 필요가 없습니다.

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

나는 잭에 동의 : List<E>에서 remove(int index) 방법은 트릭을 할 것입니다. 또한 Random 클래스를 사용하여 Collections.shuffle(list)으로 전화하여 대체 할 수 있습니다. 이름에서 알 수 있듯이 목록을 무작위로 작성합니다. listIterator을 사용하면 목록을 반복하고 카드를 선택하여 다른 목록에 저장할 수 있습니다. 이 같은 보일 것이다 : C1, C2의

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

값을, 그리고 C3 지금 볼 수있는 작품 "card2", "card1""card3"