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.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

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