Android应用程序崩溃,导致是迭代器

vli*_*o20 -1 java android iterator list arraylist

我有一个名为listOfDrills的列表,它有Iterator drillIt,有些为什么迭代器没有next()值(我很痛,列表不是空的,因为它可以正常工作listOfDrills.get(0)).这是代码:

package com.simplemathgame;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Random;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class GamePlayActivity extends Activity {
    int addDrills;
    int subDrills;
    int mulDrills;
    int divDrills;
    int minBound;
    int maxBound;

    TextView drillTextPlace;
    Button nextButton;
    Button backButton;

    List<Drill> listOfDrills = new ArrayList<Drill>();
    Iterator<Drill> drillIt = listOfDrills.iterator();

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

        //get values from other activity
        Bundle extras = getIntent().getExtras();
        addDrills = extras.getInt("addDrills");
        subDrills = extras.getInt("subDrils");
        mulDrills = extras.getInt("mulDrills");
        divDrills = extras.getInt("divDrills");
        minBound = extras.getInt("minBound");
        maxBound = extras.getInt("maxBound");

        for(int i = 0; i < addDrills; i++){
            AddDrill tmpDrill = new AddDrill(minBound,maxBound);
            listOfDrills.add(tmpDrill);
        }

        for(int i = 0; i < subDrills; i++){
            SubDrill tmpDrill = new SubDrill(minBound,maxBound);
            listOfDrills.add(tmpDrill);
        }

        for(int i = 0; i < mulDrills; i++){
            MulDrill tmpDrill = new MulDrill(minBound,maxBound);
            listOfDrills.add(tmpDrill);
        }

        for(int i = 0; i < divDrills; i++){
            DivDrill tmpDrill = new DivDrill(minBound,maxBound);
            listOfDrills.add(tmpDrill);
        }

        long seed = System.nanoTime();
        Collections.shuffle(listOfDrills, new Random(seed));

        drillTextPlace = (TextView) findViewById(R.id.drill_text);
        nextButton = (Button) findViewById(R.id.next_button);
        backButton = (Button) findViewById(R.id.back_button);

        if(drillIt.hasNext()){
            drillTextPlace.setText((drillIt.next()).printDrill());
        }

        nextButton.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(drillIt.hasNext()){
                    drillTextPlace.setText(drillIt.next().printDrill());
                }
            }
        });
    }

}
Run Code Online (Sandbox Code Playgroud)

代码永远不会进入:

if(drillIt.hasNext()){
            drillTextPlace.setText((drillIt.next()).printDrill());
        }
Run Code Online (Sandbox Code Playgroud)

如果我删除该if声明,只留下 drillTextPlace.setText((drillIt.next()).printDrill()); 应用程序崩溃.

为什么会这样?我做错了什么?谢谢!!!

Tom*_*ese 5

填写完列表后,应该创建迭代器.如文档中所示:

此类的iterator和listIterator方法返回的迭代器是快速失败的:如果在创建迭代器之后的任何时候对列表进行结构修改,除了通过迭代器自己的remove或add方法之外,迭代器将抛出ConcurrentModificationException.

http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html

移动

Iterator<Drill> drillIt = listOfDrills.iterator();
Run Code Online (Sandbox Code Playgroud)

就在之前:

if (drillIt.hasNext()) {
    drillTextPlace.setText((drillIt.next()).printDrill());
}
Run Code Online (Sandbox Code Playgroud)