Autore Topic: switch con un valore da esso usato sempre a zero :(  (Letto 702 volte)

Offline softmystery

  • Utente junior
  • **
  • Post: 105
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg optimus one
  • Sistema operativo:
    2.2
switch con un valore da esso usato sempre a zero :(
« il: 24 Febbraio 2011, 23:32:02 CET »
0
Salve ragazzi! il mio non è un problema legato ad android... almeno credo.
premetto che ho messo vari system.out.println() per vedere un pò cosa succede.... ma vi posto il codice senza i system, perchè vorrei capire se guardando il codice si capisce perchè la variabile punteggio non viene mai aggiornata....
Codice (Java): [Seleziona]
public void passa_a_storia(View Button){
                risultato_punteggio=(TextView)findViewById(R.id.risultato_punteggio);
                //risultato_punteggio me lo setta solo una volta
                MyVarGlobali var=(MyVarGlobali)getApplication();
                int volte_sbagliate=var.getRispSbagliata();
                /*
potrei fare punteggio per tappa=30 se risp subito bene=30
se risp la prima volta male=20
se risp la seconda volta male=10
la terza volta male=0*/

                //ovvero quando l'utente clicca su ok succede che se ha dato risposta esatta, allora
                //vien visualizzato il messaggio del punteggio accumulato e passa alla prossima tappa
                //gli vien visualizzata l'opzione scelta disabilitata, e gli vien comunicato il restante punteggio che può accumulare
                //esatto è una variabile globale solo a domanda.java
                if(esatto==true){
                        switch (volte_sbagliate) {
                        case 1:
                                punteggio=20;
                                var.setPunteggio(punteggio);
                                risultato_punteggio.setText("Risposta esatta! punteggio=" +punteggio);         


                        case 2:
                                punteggio=10;
                                var.setPunteggio(punteggio);
                                risultato_punteggio.setText("Risposta esatta! punteggio=" +punteggio);         
                        case 3:
                                punteggio=0;
                                var.setPunteggio(punteggio);
                                risultato_punteggio.setText("Risposta esatta! punteggio=" +punteggio);         
                        default:var.setRispSbagliata(0);
                        break;
                        }


                        int tappa_corrente=tappa+1;
                        Intent storia=new Intent(domanda.this,storia.class);
                        //MyVarGlobali var=(MyVarGlobali)getApplication();
                        var.setTappa_corrente(tappa_corrente);
                        startActivity(storia);
                }else{//risp sbagliata
                        //come faccio a sapere quante volte ha risposto male?
                        //variabile globale proviamo


                        int volte_sbagliate_compreso_adesso=volte_sbagliate+1;
                        var.setRispSbagliata(volte_sbagliate_compreso_adesso);
                        switch (volte_sbagliate_compreso_adesso) {
                        case 1:
                                risultato_punteggio.setText("ti rimangono 20 punti");

                        case 2:
                                risultato_punteggio.setText("ti rimangono 10 punti");
                        case 3:
                                risultato_punteggio.setText("ti rimangono 0 punti");
                        default:var.setRispSbagliata(0);
                        break;
                        }


                }
        }
in pratica qui: se l'utente seleziona la risposta giusta (il cui valore booleano è impostato fuori da questo metodo) e poi clicca su "ok" (ovvero si attiva android:onClick"passa_a_storia") verifico se ciò che ha cliccato è la risposta giusta, e in base a quante risposte sbagliate ha fatto in precedenza setto la variabile punteggio. quest'ultima però è sempre 0! non posto il logcat perchè non ci sono errori, ma è sbagliata la logica!
se qualcuno riesce a spiegarmi il perchè, lo ringrazio in anticipo

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:switch con un valore da esso usato sempre a zero :(
« Risposta #1 il: 25 Febbraio 2011, 07:57:02 CET »
0
Io metterei dei Log.i per tracciare da dove passa e quali valori assumono di volta in volta le variabili.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline softmystery

  • Utente junior
  • **
  • Post: 105
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg optimus one
  • Sistema operativo:
    2.2
Re:switch con un valore da esso usato sempre a zero :(
« Risposta #2 il: 25 Febbraio 2011, 08:25:37 CET »
0
ho messo i system.out.println.... non fanno la stessa cosa?

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:switch con un valore da esso usato sempre a zero :(
« Risposta #3 il: 25 Febbraio 2011, 08:27:23 CET »
0
ho messo i system.out.println.... non fanno la stessa cosa?

E non si riesce a capire quando la variabile passa a 0 ?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:switch con un valore da esso usato sempre a zero :(
« Risposta #4 il: 25 Febbraio 2011, 08:38:56 CET »
+1
Alla fine di OGNI case, devi mettere un break; altrimenti il programma esegue le istruzioni dei case successivi.

Codice (Java): [Seleziona]
switch (volte_sbagliate) {
                        case 1:
                                punteggio=20;
                                var.setPunteggio(punteggio);
                                risultato_punteggio.setText("Risposta esatta! punteggio=" +punteggio);  
                                break;
       


                        case 2:
                                punteggio=10;
                                var.setPunteggio(punteggio);
                                risultato_punteggio.setText("Risposta esatta! punteggio=" +punteggio);  
                                break;


                        ....

Offline softmystery

  • Utente junior
  • **
  • Post: 105
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg optimus one
  • Sistema operativo:
    2.2
Re:switch con un valore da esso usato sempre a zero :(
« Risposta #5 il: 25 Febbraio 2011, 09:38:23 CET »
0
no per questo ho postato. nel logcat (con i system ) è tutto ok, punteggio non assume mai valore zero, se non all'inizio del programma(il che è giusto, perchè inizio a giocare)! comunque , sempre guardando i logcat notando che mi leggeva sempre tutti i case, e non si fermava mai a uno solo, ho notato che come allo stupido non ho messo i break... :-[ 
ma comunque c'è sempr qualcosa che non quadra, però almeno adesso punteggio visualizzato non è più fisso a zero!  :-)
magari aggiusto il codice e posto tutto completamente compresi i logcat

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:switch con un valore da esso usato sempre a zero :(
« Risposta #6 il: 25 Febbraio 2011, 10:26:59 CET »
+1
no per questo ho postato. nel logcat (con i system ) è tutto ok, punteggio non assume mai valore zero, se non all'inizio del programma(il che è giusto, perchè inizio a giocare)! comunque , sempre guardando i logcat notando che mi leggeva sempre tutti i case, e non si fermava mai a uno solo, ho notato che come allo stupido non ho messo i break... :-[ 
ma comunque c'è sempr qualcosa che non quadra, però almeno adesso punteggio visualizzato non è più fisso a zero!  :-)
magari aggiusto il codice e posto tutto completamente compresi i logcat

Ti stavo dicendo di usare i Log.i (o system.xxx) proprio per tracciare i percorsi di esecuzione... mettendo un Log.i per ciascuno dei casi, ti rendi conto quando, dove e come passa per ciascun branch.

NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline softmystery

  • Utente junior
  • **
  • Post: 105
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg optimus one
  • Sistema operativo:
    2.2
Re:switch con un valore da esso usato sempre a zero :(
« Risposta #7 il: 25 Febbraio 2011, 11:52:09 CET »
0
a ok! comunque risolto... erano anche altre variabili fuori da quel metodo... grazie mille!