Pereiti prie turinio

Android/java. Out of bounds erroras su identišku kodu.


Rekomenduojami pranešimai

Visu pirma bandysiu paaiškinti ką mano programa turėtų daryti, kad lengviau būtų patį kodą suprasti.

 

Yra 3 klausimai. Kiekvienas iš jų turi priskirta boolean tipą.

Yra 2 mygtukai, True ir False.

Parodomas klausimas ir žmogus renkasi jis teisingas(true) ar ne(false). Jai paspaustas mygtukas sutampa su boolean tipu, pridedamas taškas į žaidėjo rezultatą ir rodomas kitas klausimas. Jai nesutampa, žaidėjas taško negauna, tačiau vistiek rodomas kitas klausimas. Pasiekus paskutinį klausimą ir į jį atsakius iššoka alertas ir žmogus gali pasirinkti, baigti žaidimą ar pradėti iš naujo.

 

Problema:

 

Problema susijusi su paskutiniu klausimu. Jai paaskutiniame klausime paspaudžiu true, viskas veikia gerai. Jai False, išmeta Invalid index 3, size is 3. Taip atsitinka tik su paskutiniu klausimu.

Pvz: Tarkim klausimai yra(True, false, true):

 

True, true, true = no errors. Correct.

True, false, true = no errors. Correct.

false, true, true = no errors. Correct.

 

True, true, false = Invalid index 3, size is 3.

True, false, false = Invalid index 3, size is 3.

False, false, false = Invalid index 3, size is 3.

 

Kodai beveik identiški(išskyrus tas vietas kur lyginamas klausimas su mygtuku).

 

True mygtukas:

 mTrue.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               initiatePopupWindow();

               // When PopUp button closes open the next question with the if/else conditions.
               btnClosePopup.setOnClickListener(new View.OnClickListener() {
                   @Override
                   public void onClick(View v) {
                       //if the question is true show next question/else close app
                       if (type.get(count[0])) {

                           scores++; // Add +1 to the score;
                           if (questions.size() - 1 == count[0]) // if you count[0] is init to 0
                           {
                               // if its the last question open dialog to choose end game or restart;
                               AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                               builder.setTitle("WInner");
                               builder.setMessage("The score is " + scores);
                               builder.setCancelable(false);
                               builder.setPositiveButton(android.R.string.yes,
                                       new DialogInterface.OnClickListener() {
                                           public void onClick(DialogInterface dialog, int id) {
                                               // just close dialog
                                               dialog.cancel();
                                        }
                                       });
                               builder.setNegativeButton(android.R.string.no,
                                       new DialogInterface.OnClickListener() {
                                           public void onClick(DialogInterface dialog, int id) {

                                               score();

                                               Intent gryzti = new Intent(MainActivity.this, LevelSelectActivity.class);
                                               startActivity(gryzti);
                                           }
                                       });

                               // Create dialog from builder
                               AlertDialog alert = builder.create();

                               // Show dialog
                               alert.show();
                               count[0] = 0;

                           } /** else if (questions.size() - 1 < count[0])
                            try {
                            throw new Exception("Invalid ");
                            } catch (Exception e) {
                            e.printStackTrace();
                            } */
                           else  // if the question is not the last show the next question.
                           count[0]++;
                           mQuestion.setText(questions.get(count[0]).question); // you dont need calculate the module anymore
                           pwindo.dismiss();
                       } else {
                           count[0]++;
                           pwindo.dismiss();
                           mQuestion.setText(questions.get(count[0]).question); // you dont need calculate the module anymore

                       }

                   }
               });

           }
       });

 

False mygtukas:

 

mFalse.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               initiatePopupWindow(); 

               btnClosePopup.setOnClickListener(new View.OnClickListener() {
                   @Override
                   public void onClick(View v) {

                       if (!type.get(count[0])) {
                           scores++;
                           if (questions.size() - 1 == count[0]) // if you count[0] is init to 0
                           {
                               // if its the last question open dialog to choose end game or restart;
                               AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                               builder.setTitle("WInner");
                               builder.setMessage("The score is " + scores);
                               builder.setCancelable(false);
                               builder.setPositiveButton(android.R.string.yes,
                                       new DialogInterface.OnClickListener() {
                                           public void onClick(DialogInterface dialog, int id) {
                                               // just close dialog
                                               dialog.cancel();
                                           }
                                       });
                               builder.setNegativeButton(android.R.string.no,
                                       new DialogInterface.OnClickListener() {
                                           public void onClick(DialogInterface dialog, int id) {
                                               score();
                                               Intent gryzti = new Intent(MainActivity.this, LevelSelectActivity.class);
                                               startActivity(gryzti);
                                           }
                                       });
                               // Create dialog from builder
                               AlertDialog alert = builder.create();

                               // Show dialog
                               alert.show();
                               count[0] = 0;

                           } /** else if (questions.size() - 1 < count[0])
                               try {
                                   throw new Exception("Invalid ");
                               } catch (Exception e) {
                                   e.printStackTrace();
                               } */
                           else
                           count[0]++;
                           mQuestion.setText(questions.get(count[0]).question); // you dont need calculate the module anymore
                           pwindo.dismiss();
                       } else {
                           count[0]++;
                           mQuestion.setText(questions.get(count[0]).question); // you dont need calculate the module anymore
                           pwindo.dismiss();
                       }
                   }
               });

           }
       });

   }

 

Priimu ir kritika, nes kodas tikrai netobulas, bet tik su pagalba ar pavyzdžiais. ;)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...