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());
应用程序崩溃.
为什么会这样?我做错了什么?谢谢!!!
填写完列表后,应该创建迭代器.如文档中所示:
此类的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)
| 归档时间: |
|
| 查看次数: |
517 次 |
| 最近记录: |