Partage
  • Partager sur Facebook
  • Partager sur Twitter

java.lang.IndexOutOfBoundsException

    3 avril 2022 à 14:39:37

    Bonjour,

    j'essaye de coder ma première application android avec android studio et le language Java. J'ai suivi le cours sur openclassroom et j'essaye de faire une application avec le même principe mais dès que je lance ma deuxième activité après avoir démarré l'app sur mon téléphone ça crash et j'ai cette erreur:

    2022-04-03 14:24:09.350 5332-5332/com.monnomdutilisateur.monapplication E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.monnomdutilisateur.monapplication, PID: 5332
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.monnomdutilisateur.monapplication/com.monnomdutilisateur.monapplication.controller.GameActivity}: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3556)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3703)
            at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
            at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
            at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2216)
            at android.os.Handler.dispatchMessage(Handler.java:107)
            at android.os.Looper.loop(Looper.java:237)
            at android.app.ActivityThread.main(ActivityThread.java:7948)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)
         Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
            at java.util.ArrayList.get(ArrayList.java:437)
            at com.monnomdutilisateur.monapplication.model.QuestionManager.<init>(QuestionManager.java:40)
            at com.monnomdutilisateur.monapplication.controller.GameActivity.onCreate(GameActivity.java:42)
            at android.app.Activity.performCreate(Activity.java:7955)
            at android.app.Activity.performCreate(Activity.java:7944)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3531)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3703) 
            at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
            at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
            at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2216) 
            at android.os.Handler.dispatchMessage(Handler.java:107) 
            at android.os.Looper.loop(Looper.java:237) 
            at android.app.ActivityThread.main(ActivityThread.java:7948) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075) 
    2022-04-03 14:24:09.391 5332-5332/com.monnomdutilisateur.monapplication I/Process: Sending signal. PID: 5332 SIG: 9
    

    D'après ce que j'ai compris, le problème vient de la classe QuestionManager dont le rôle est de gérer les objets Question pour mon activité (GameActivity).

    Voilà le code:

    public class QuestionManager {
    
        private List<Question> mQuestions = new ArrayList<>();
        private List<Question> mQuestionList= new ArrayList<>();
        private int mCurrentQuestionIndex;
        private Question mCurrentQuestion;
    
        public QuestionManager() {
            mQuestions
                    .add(new Question("What is the lightest existing metal?", Arrays.asList("Uranium", "Lithium", "Hydrogen", "Aluminum"), 2));
            mQuestions
                    .add(new Question("Who was the first man to fly around the earth with a spaceship?", Arrays.asList("Youri Gagarine", "Neil Armstrong", "Riri Margarine", "Louis Armstrong"), 1));
            mQuestions
                    .add(new Question("What is the color of a giraffe tongue?", Arrays.asList("Yellow", "Pink", "Giraffes don't have a tongue", "Purple"), 4));
            mQuestions
                    .add(new Question("Who was the inventor of the steam engine?", Arrays.asList("James Watt", "Thomas Edison", "Louis XVI", "Matteo Gibbs"), 1));
            mQuestions
                    .add(new Question("What is the light speed?", Arrays.asList("299 792 458 m/s", "180 km/h", "759 376 185 m/s", "600 m/s"), 1));
    
            int numbers[] = new int[4];
            int randomNumber;
    
            for(int i = 0; i>=3; i++){
                do{
                    randomNumber = 1 + (int)(Math.random() * ((4 - 1) + 1));
                }
                while(isQuestionAlreadyPut(randomNumber, numbers));
                mQuestionList.add(mQuestions.get(randomNumber));
                numbers[i] = randomNumber;
            }
    
            mCurrentQuestion = mQuestionList.get(0);
            mCurrentQuestionIndex = 0;
        }
    
        private boolean isQuestionAlreadyPut(int n, int numberList[]) {
            boolean booleanReturned = false;
    
            for (int i = 0; i >= 3; i++) {
                if(numberList[i]==n) booleanReturned = true;
            }
    
            return booleanReturned;
        }
    
        public List<Question> getQuestionQueue(){
            return mQuestionList;
        }
    
        public Question getCurrentQuestion() {
            return mCurrentQuestion;
        }
    
        public boolean nextQuestion(){
            if(mCurrentQuestionIndex++ <= mQuestionList.size()-1){
                mCurrentQuestion = mQuestionList.get(++mCurrentQuestionIndex);
                return false;
            }
            else return true;
        }
    }

    En fait d'après ce que j'ai trouvé sur internet (et ce qui était marqué dans le message d'erreur) ce serait l'instruction

    mCurrentQuestion = mQuestionList.get(0);

    qui poserait un problème parce que mQuestionList serait nulle à la position 0. Pourtant un peu plus haut

    for(int i = 0; i>=3; i++){
                do{
                    randomNumber = 1 + (int)(Math.random() * ((4 - 1) + 1));
                }
                while(isQuestionAlreadyPut(randomNumber, numbers));
                mQuestionList.add(mQuestions.get(randomNumber));
                numbers[i] = randomNumber;
            }

    elle est censée reçevoir 4 questions récupérées aléatoirement dans l'objet mQuestions.

    Pourriez vous m'indiquer mon erreur?

    Merci d'avance pour votre réponse,

    SniffierPond


    -
    Edité par SniffierPond 3 avril 2022 à 14:42:02

    • Partager sur Facebook
    • Partager sur Twitter
      3 avril 2022 à 16:08:16

      Bonjour,

      Vérifie tes conditions lignes 23 et 39. ;)

      -
      Edité par brubru777 3 avril 2022 à 16:09:46

      • Partager sur Facebook
      • Partager sur Twitter

      java.lang.IndexOutOfBoundsException

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown