Autore Topic: Non riesco a far funzionare questo codice...  (Letto 652 volte)

Offline theKuston

  • Nuovo arrivato
  • *
  • Post: 48
  • Respect: 0
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus 5
  • Play Store ID:
    K-soft
  • Sistema operativo:
    windows 8.1, Ubuntu 14
Non riesco a far funzionare questo codice...
« il: 22 Agosto 2014, 10:58:41 CEST »
0
Weeee!
allora io ho questo codice  per risolvere un'espressione  contenuta in una string ma non funziona...
Codice (Java): [Seleziona]
 btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String toParse = "25+5=";
                Log.d("toParse",toParse);
                int length = toParse.length();
                Log.d("length",length+"");
                double[] number ={0,0,0,0,0};
                char[] operator = {'0','0'};
                int meno_i = 0;

                for(int i = 0; i<length-2; i++){
                    number[i] = 0;
                };

                for (int i = 0; toParse.charAt(i) != '='-1;i++){
                    Log.d("i",""+i);
                    Log.d("char",Character.toString(toParse.charAt(i)));
                    switch(toParse.charAt(i)){
                        case '2' :
                            Log.d("case","case 2");
                            number[i-meno_i] = 2;
                            if(i-meno_i>0){
                                int a = 2;
                                Log.d("a",a+"");
                                double c = number[i-1-meno_i];
                                Log.d("c",c+"");
                                double app = c*c*10;

                                if(app > 0){
                                    double deci = c*10;
                                    if(deci >0){
                                        number[i-1-meno_i] = deci+a;
                                        number[i-meno_i] = 0;
                                        meno_i++;

                                    }else if (deci <0){
                                        number[i-1-meno_i] = deci-a;
                                        number[i-meno_i] = 0;
                                        meno_i++;
                                    }
                                }
                            }
                            break;
                        case '5' :
                            Log.d("case","case 5");
                            number[i-meno_i] = 5;
                            if(i-meno_i>0){
                                int a = 5;
                                double c = number[i-1-meno_i];
                                double app = c*c*10;

                                if(app > 0){
                                    double deci = c*10;
                                    if(deci >0){
                                        number[i-1-meno_i] = deci+a;
                                        number[i-meno_i] = 0;
                                        meno_i++;

                                    }else if (deci <0){
                                        number[i-1-meno_i] = deci-a;
                                        number[i-meno_i] = 0;
                                        meno_i++;
                                    }
                                }
                            }
                            break;
                        case '+':
                            Log.d("case","case +");
                            if(i == 0){
                                meno_i++;
                                Log.d("meno_i",meno_i+"");

                            }else{
                                operator[i-meno_i] = '+';
                                Log.d("operator",operator[i]-meno_i+"");
                            }
                            break;
                    }
                };
                int i = 1;
                while(operator[i-1] == '+'){
                    Log.d("oeprator",operator[i]+"");
                    number[i-1] = number[i-meno_i] + number[i+meno_i];
                    Log.d("number", number[i-1]+"");
                    number[i+1] = 0;
                    Log.d("number",number[i]+1+"");
                    i++;
                }





            }


        });
e mi da questo LogCat:
Codice: [Seleziona]
08-22 10:57:00.610  25550-25550/com.el.kuston.expresssinon I/Adreno-EGL﹕ <qeglDrvAPI_eglInitialize:320>: EGL 1.4 QUALCOMM Build: I0404c4692afb8623f95c43aeb6d5e13ed4b30ddbDate: 11/06/13
08-22 10:57:00.630  25550-25550/com.el.kuston.expresssinon D/OpenGLRenderer﹕ Enabling debug mode 0
08-22 10:57:08.000  25550-25550/com.el.kuston.expresssinon D/toParse﹕ 25+5=
08-22 10:57:08.000  25550-25550/com.el.kuston.expresssinon D/length﹕ 5
08-22 10:57:08.000  25550-25550/com.el.kuston.expresssinon D/i﹕ 0
08-22 10:57:08.000  25550-25550/com.el.kuston.expresssinon D/char﹕ 2
08-22 10:57:08.000  25550-25550/com.el.kuston.expresssinon D/case﹕ case 2
08-22 10:57:08.000  25550-25550/com.el.kuston.expresssinon D/i﹕ 1
08-22 10:57:08.000  25550-25550/com.el.kuston.expresssinon D/char﹕ 5
08-22 10:57:08.000  25550-25550/com.el.kuston.expresssinon D/case﹕ case 5
08-22 10:57:08.000  25550-25550/com.el.kuston.expresssinon D/i﹕ 2
08-22 10:57:08.000  25550-25550/com.el.kuston.expresssinon D/char﹕ +
08-22 10:57:08.000  25550-25550/com.el.kuston.expresssinon D/case﹕ case +
08-22 10:57:08.000  25550-25550/com.el.kuston.expresssinon D/AndroidRuntime﹕ Shutting down VM
08-22 10:57:08.000  25550-25550/com.el.kuston.expresssinon E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.el.kuston.expresssinon, PID: 25550
    java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
            at com.el.kuston.expresssinon.MyActivity$1.onClick(MyActivity.java:106)
            at android.view.View.performClick(View.java:4438)
            at android.view.View$PerformClick.run(View.java:18422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5001)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
Vi ringrazio!
« Ultima modifica: 22 Agosto 2014, 11:10:07 CEST da theKuston »
Tutte le mie applicazioni sul play store:
https://play.google.com/store/apps/developer?id=K-soft

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Non riesco a far funzionare questo codice...
« Risposta #1 il: 22 Agosto 2014, 11:09:52 CEST »
+1
Citazione
java.lang.ArrayIndexOutOfBoundsException: length=2; index=2

Hai un array di lunghezza 2, quando l'indice diventa 2 (cioè terzo elemento) viene (giustamente) generata questa exception.

Citazione
at com.el.kuston.expresssinon.MyActivity$1.onClick(MyActivity.java:106)

Comincia a guardare alla riga 106.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store