Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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
ArrayList OutOfBounds-Java(Android)编程_Java_Android_Arraylist_Indexoutofboundsexception - Fatal编程技术网

ArrayList OutOfBounds-Java(Android)编程

ArrayList OutOfBounds-Java(Android)编程,java,android,arraylist,indexoutofboundsexception,Java,Android,Arraylist,Indexoutofboundsexception,LogCat输出的错误指向QuestionView.java的第37行,我将在下面的代码中对其进行注释。下面我有4个类的4个片段。我还有LogCat的输出 MainMenu.java public class MainMenu extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVi

LogCat输出的错误指向QuestionView.java的第37行,我将在下面的代码中对其进行注释。下面我有4个类的4个片段。我还有LogCat的输出

MainMenu.java

public class MainMenu extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mainmenumain);

    Button button1 = (Button)findViewById(R.id.startBtn);
    Button button2 = (Button)findViewById(R.id.categoriesBtn);
    Button button3 = (Button)findViewById(R.id.highscoresBtn);
    Button button4 = (Button)findViewById(R.id.aboutBtn);

    button1.setOnClickListener(new OnClickListener() {   
        public void onClick(View arg0) {
            Intent intent1 = new Intent(MainMenu.this, QuestionView.class);
            startActivity(intent1);  
        }
    });
//more code...
Question.java

public class Question {
String a1;
String a2;
String a3;
String a4;
int correctAnswer;
String query;

public Question() {
}

public Question(String a1, String a2, String a3, String a4, int correctAnswer, String query) {
    this.a1 = a1;
    this.a2 = a2;
    this.a3 = a3;
    this.a4 = a4;
    this.correctAnswer = correctAnswer;
    this.query = query;        
}

public String getA1() { return a1; }
public String getA2() { return a2; }
public String getA3() { return a3; }
public String getA4() { return a4; }
public String getQuery() { return query; }
public int getCorrectAnswer() { return correctAnswer; }
  }
quick.java

public class Quiz {
ArrayList<Question> qList = new ArrayList<Question>();
public static ArrayList<Question> tenQs = new ArrayList<Question>(10);

public Quiz() {
    qList.add(new Question("A", "B", "C", "D", 3, "Question 1?"));
    qList.add(new Question("A", "B", "C", "D", 3, "Question 2?"));
    qList.add(new Question("A", "B", "C", "D", 3, "Question 3?"));
    qList.add(new Question("A", "B", "C", "D", 3, "Question 4?"));
    qList.add(new Question("A", "B", "C", "D", 3, "Question 5?"));
    qList.add(new Question("A", "B", "C", "D", 3, "Question 6?"));
    qList.add(new Question("A", "B", "C", "D", 3, "Question 7?"));
    qList.add(new Question("A", "B", "C", "D", 3, "Question 8?"));
    qList.add(new Question("A", "B", "C", "D", 3, "Question 9?"));
    qList.add(new Question("A", "B", "C", "D", 3, "Question 10?"));
    qList.add(new Question("A", "B", "C", "D", 3, "Question 11?"));
    qList.add(new Question("A", "B", "C", "D", 3, "Question 12?"));
    qList.add(new Question("A", "B", "C", "D", 3, "Question 13?"));
    qList.add(new Question("A", "B", "C", "D", 3, "Question 14?"));
}

public void getRandom10() {
    for(int i = 0; i < 10; i++) {
        Question x = qList.get((int) Math.floor((qList.size()+1)*Math.random()));
        if(tenQs.contains(x) == true) {
            i--;
        } else {
            tenQs.add(x);
        }
    }
}

public ArrayList<Question> getTenQs() { 
    return tenQs;
}
  }

任何帮助或意见都将不胜感激!提前谢谢。

您不需要调用
getRandom10()
方法来初始化列表

编辑
此外,您在课堂
测验中使用了糟糕的设计:

  • tenQs
    是您从
    非静态
    列表
    qList
    中填充数据的
    静态
    列表

  • 另外,
    tenQs
    public
    ,可以通过class:
    quick.tenQs
    直接访问它。我想将其设置为
    private
    非静态
    ,并在construtor内部调用
    getRandom10
    ,以确保
    测验的正确初始化

  • 将您的随机索引设置为:
  • 代码:

    Random r=new Random();
    对于(int i=0;i<10;i++){
    问题x=qList.get(r.nextInt(qList.size());
    添加(x);
    }
    

    我明白了。如果将内部
    用于
    条件
    for
    循环中使用它。

    将for循环条件更改为:

    for(int i = 0; i < queries.size() ; i++)
    
    for(int i=0;i

    并确保在使用ArrayList之前初始化了
    查询
    ArrayList

    qList.size()+1=11,这样random将给出0到10之间的任何数字。。。所以,若数字是从0到9是可以的,但10会导致程序失败

    这是个例外。确保引用的数组项值已正确初始化,并且没有空值。找到它。我将getTenQs()和getRandomTen()组合成一个方法:public ArrayList getRandom10(){for(int I=0;I内部
    onCreate
    ,也如imran所述。什么不起作用?当我点击主菜单上的开始按钮时,一个新的活动出现了一个文本视图和4个按钮,但它们都是空字符串,所以什么也没有出现。它们应该从getQuery()、getA1()、getA2()、getA3()和getA4()中填充,但显然有些东西不起作用。如果有帮助,请接受我的答案)
    11-12 00:08:40.983: E/AndroidRuntime(4338): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.QuestionView}: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
    11-12 00:08:40.983: E/AndroidRuntime(4338):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
    11-12 00:08:40.983: E/AndroidRuntime(4338):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
    11-12 00:08:40.983: E/AndroidRuntime(4338):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
    11-12 00:08:40.983: E/AndroidRuntime(4338):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
    11-12 00:08:40.983: E/AndroidRuntime(4338):     at android.os.Handler.dispatchMessage(Handler.java:99)
    11-12 00:08:40.983: E/AndroidRuntime(4338):     at android.os.Looper.loop(Looper.java:137)
    11-12 00:08:40.983: E/AndroidRuntime(4338):     at android.app.ActivityThread.main(ActivityThread.java:4745)
    11-12 00:08:40.983: E/AndroidRuntime(4338):     at java.lang.reflect.Method.invokeNative(Native Method)
    11-12 00:08:40.983: E/AndroidRuntime(4338):     at java.lang.reflect.Method.invoke(Method.java:511)
    11-12 00:08:40.983: E/AndroidRuntime(4338):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
    11-12 00:08:40.983: E/AndroidRuntime(4338):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    11-12 00:08:40.983: E/AndroidRuntime(4338):     at dalvik.system.NativeStart.main(Native Method)
    11-12 00:08:40.983: E/AndroidRuntime(4338): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
    11-12 00:08:40.983: E/AndroidRuntime(4338):     at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
    11-12 00:08:40.983: E/AndroidRuntime(4338):     at java.util.ArrayList.get(ArrayList.java:304)
    11-12 00:08:40.983: E/AndroidRuntime(4338):     at com.example.test.QuestionView.onCreate(QuestionView.java:37)
    11-12 00:08:40.983: E/AndroidRuntime(4338):     at android.app.Activity.performCreate(Activity.java:5008)
    11-12 00:08:40.983: E/AndroidRuntime(4338):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
    11-12 00:08:40.983: E/AndroidRuntime(4338):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
    
    Random r = new Random();
    for(int i = 0; i < 10; i++) {
        Question x = qList.get(r.nextInt(qList.size()));
        tenQs.add(x);
    }
    
    for(int i = 0; i < queries.size() ; i++)