java.lang.IndexOutOfBoundsException:索引6无效,android studio中的大小为6

问题描述 投票:-1回答:2

我的应用程序一直崩溃,我不知道错误在哪里

以下是我的代码

public class Question2 extends AppCompatActivity {

private TextView Question1, text1;
private Button ans1, ans2, ans3, ans4, ans5, ans6, next;
private ImageView iV1;

private String Right_Answer;
private int Right_Answer_Count;
private int quizCount = 1;


ArrayList<ArrayList<String>> quizArray = new ArrayList<>();

String quizData[][] = {
        {"circle","12","8","6","29","57","5"},
        {"pentagon","8","29","74","5","15","6"},
        {"quadrilateral","6","12","3","5","57","8"},
        {"triangle","29","12","8","5","15","6"},
        {"decagon","57","6","12","3","29","8"},
        {"hexagon","5","29","57","6","12","3"},
        {"heptagon","74","12","8","5","29","57"},
        {"nonagon","15","6","12","3","29","57"},
        {"octagon","3","74","5","15","6","12"},
        {"star","5","29","57","6","74","12"}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_question1);
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    text1 = findViewById(R.id.text1);
    Question1 = findViewById(R.id.Question1);
    iV1 = findViewById(R.id.iV1);
    ans1 = findViewById(R.id.ans1);
    ans2 = findViewById(R.id.ans2);
    ans3 = findViewById(R.id.ans3);
    ans4 = findViewById(R.id.ans4);
    ans5 = findViewById(R.id.ans5);
    ans6 = findViewById(R.id.ans6);
    next = findViewById(R.id.next);

    //Come out after 5 sec
    Question1.setVisibility(View.INVISIBLE);
    ans1.setVisibility(View.INVISIBLE);
    ans2.setVisibility(View.INVISIBLE);
    ans3.setVisibility(View.INVISIBLE);
    ans4.setVisibility(View.INVISIBLE);
    ans5.setVisibility(View.INVISIBLE);
    ans6.setVisibility(View.INVISIBLE);
    next.setVisibility(View.INVISIBLE);

    //Disappear after 5 sec
    text1.setVisibility(View.VISIBLE);
    iV1.setVisibility(View.VISIBLE);

    for (int i = 0; i < 10; i++) {
        ArrayList<String> tmpArray = new ArrayList<>();
        tmpArray.add(quizData[i][0]); // choice 0
        tmpArray.add(quizData[i][1]); // choice 1
        tmpArray.add(quizData[i][2]); // choice 2
        tmpArray.add(quizData[i][3]); // choice 3
        tmpArray.add(quizData[i][4]); // choice 4
        tmpArray.add(quizData[i][5]); // choice 5
        tmpArray.add(quizData[i][6]);

        quizArray.add(tmpArray);
    }

    Shift1();
    Show_Next_Quiz();
}

public void Show_Next_Quiz(){

    Random random = new Random();
    int Random_Num = random.nextInt(quizArray.size());

    ArrayList<String> quiz = quizArray.get(Random_Num);

    Question1.setText("Question " + quizCount + ". What is the number from the picture ?");

    iV1.setImageResource(
            getResources().getIdentifier(quiz.get(0), "drawable", getPackageName())
    );

    Right_Answer = quiz.get(1);

    quiz.remove(0);

    Collections.shuffle(quiz);

    ans1.setText(quiz.get(1));
    ans2.setText(quiz.get(2));
    ans3.setText(quiz.get(3));
    ans4.setText(quiz.get(4));
    ans5.setText(quiz.get(5));
    ans6.setText(quiz.get(6));

    quizArray.remove(Random_Num);

}

public void Check_Answer(View view) {

    Button Answer = findViewById(view.getId());
    String btnText = Answer.getText().toString();

    String alertTitle;

    if (btnText.equals(Right_Answer)){
        alertTitle = "Correct !!!";
        Right_Answer_Count++;
    }   else    {
        alertTitle = "Sorry, you are wrong =(";
    }

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(alertTitle);
    builder.setMessage("Answer : " + Right_Answer);
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int i) {
            if (quizArray.size() < 1){
                Show_Result();
            }   else  {
                quizCount++;
                Shift2();
                Show_Next_Quiz();
            }
        }
    });
    builder.setCancelable(false);
    builder.show();
}

public void Show_Result(){
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Result");
    builder.setMessage(Right_Answer_Count + " / 10");
    builder.setPositiveButton("Try Again?", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int i) {
            recreate();
        }
    });
    builder.setNegativeButton("Quit", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int i) {
            Exit();
        }
    });
    builder.show();
}

public void Exit(){
    Intent x = new Intent(this,MainMenu.class);
    startActivity(x);
}

public void Result(View view){
    Show_Result();
}

public void Shift2(){

    Question1.setVisibility(View.INVISIBLE);
    ans1.setVisibility(View.INVISIBLE);
    ans2.setVisibility(View.INVISIBLE);
    ans3.setVisibility(View.INVISIBLE);
    ans4.setVisibility(View.INVISIBLE);
    ans5.setVisibility(View.INVISIBLE);
    ans6.setVisibility(View.INVISIBLE);
    next.setVisibility(View.INVISIBLE);

    text1.setVisibility(View.VISIBLE);
    iV1.setVisibility(View.VISIBLE);

    Shift1();
}

public void Shift1(){

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            Question1.setVisibility(View.VISIBLE);
            ans1.setVisibility(View.VISIBLE);
            ans2.setVisibility(View.VISIBLE);
            ans3.setVisibility(View.VISIBLE);
            ans4.setVisibility(View.VISIBLE);
            ans5.setVisibility(View.VISIBLE);
            ans6.setVisibility(View.VISIBLE);
            next.setVisibility(View.VISIBLE);
        }
    },3*1000);

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            text1.setVisibility(View.INVISIBLE);
            iV1.setVisibility(View.INVISIBLE);

        }
    },3*1000);
    }
}

这是错误:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.user.intern, PID: 24655
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.user.intern/com.example.user.intern.Question2}: java.lang.IndexOutOfBoundsException: Invalid index 6, size is 6
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2187)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2236)
    at android.app.ActivityThread.access$800(ActivityThread.java:138)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5095)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
    at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.IndexOutOfBoundsException: Invalid index 6, size is 6
    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
    at java.util.ArrayList.get(ArrayList.java:308)
    at com.example.user.intern.Question2.Show_Next_Quiz(Question2.java:123)
    at com.example.user.intern.Question2.onCreate(Question2.java:96)
    at android.app.Activity.performCreate(Activity.java:5286)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2151)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2236) 
    at android.app.ActivityThread.access$800(ActivityThread.java:138) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5095) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 
    at dalvik.system.NativeStart.main(Native Method) 
android indexoutofboundsexception
2个回答
1
投票

当大小为6时,最大索引(或偏移量)为5.您从0开始计数。


0
投票

在Java中,数组索引从0开始。因此,当您声明数组大小为例如6时,您可以访问索引0,1,2,3,4,5。因此,数组中有6个元素,索引为0到5。

© www.soinside.com 2019 - 2024. All rights reserved.