Java Android应用程序崩溃,原因是迭代器

Java Android应用程序崩溃,原因是迭代器,java,android,list,arraylist,iterator,Java,Android,List,Arraylist,Iterator,我有一个名为listOfDrills的列表,它有迭代器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 j

我有一个名为listOfDrills的列表,它有迭代器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());
                }
            }
        });
    }

}
如果我删除
if
语句,只留下
drillTextPlace.setText((drillIt.next()).printDrill())
应用程序崩溃了


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

您应该在填写完列表后创建迭代器。如文件所示:

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

移动


您创建迭代器太早,需要在使用迭代器之前创建迭代器。当它为空时,您正在创建它。即使这样,每次你打next时,你都会向前一步,永远不会后退…

你会收到什么错误消息?显示完整的堆栈跟踪。
if(drillIt.hasNext()){
            drillTextPlace.setText((drillIt.next()).printDrill());
        }
Iterator<Drill> drillIt = listOfDrills.iterator();
if (drillIt.hasNext()) {
    drillTextPlace.setText((drillIt.next()).printDrill());
}