Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    74

    Errore "may not have been initialized"

    Ciao ragazzi .. ho un problemone .. ci sto sbattendo la testa ovunque,vi faccio subito vedere il problema ..


    codice:
    import java.util.Scanner;
    class Strutture {
    
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
             Scanner tast=new Scanner (System.in);
                int ff;
                double Sp,Sp2,r1,r2,r3,r4;
                System.out.print ("Spettatori  ");
                Sp=tast.nextDouble ();
                Sp2=Sp*2.3;
                System.out.print ("Livello Fast food ");
                ff=tast.nextInt ();
                
                 if (ff==1) { 
                 r1=(Sp2*4)*3+(45.000*2);
                 }
                if (ff==2) {
                 r2=(Sp2*8)*3-(90.000*2);
               
                  }
                   if (ff==3) {
                       r3=(Sp2*12)*3-(135.000*2);
                       if (ff==4) {
                           r4=(Sp2*16)*3-(180.000*2);
                       }
                       
                       if (r1>r2) {
                           System.out.print ("Livello 1");
                           System.out.print ("Ricavo bisettimanale:   "+r1);
                              } 
                          if (r2>r3)   {
                            System.out.print ("Livello 2");
                            System.out.print ("Ricavo bisettimanale:     "+r2);
                              }
                          if (r3>r4) {
                              System.out.print ("Livello 3");
                              System.out.print ("Ricavo bisettimanale:    "+r3);
                         }
                          else {
                              System.out.print ("Livello 4");
                              System.out.print ("Ricavo bisettimanale:    "+r4);
                          }
                   }
        }
    }

    *Uso Eclipse*

    errore:
    Le variabili r1,r2,r3 ed r4 "may not ave been initialized" e vedendo su internet e la soluzione diretta di Eclipse mi fa mettere esempio r1=0 e così anche per le altre variabili ..
    Il problema che non capisco il perchè me lo dichiara 0 se il suo valore non è tale numero

    Grazie per le risposte
    Ultima modifica di LeleFT; 18-11-2014 a 16:13 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Se una variabile viene usata ALLORA da qualche parte la devi inizializzare. Nel tuo caso si vede che ci sono diramazioni in cui potresti non entrare mai e quindi il valore della tua variabile resta indefinito.

    Esempio,

    codice:
    int x;
    
    if (qualcosa) {
        x = 10;
    }
    
    System.out.println(x);
    Se qualcosa è false cosa stampi? Boh.. devi quindi assicurarti di coprire tutti i rami

    ps: Usa il tag CODE
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    74
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Se una variabile viene usata ALLORA da qualche parte la devi inizializzare. Nel tuo caso si vede che ci sono diramazioni in cui potresti non entrare mai e quindi il valore della tua variabile resta indefinito.

    Esempio,

    codice:
    int x;
    
    if (qualcosa) {
        x = 10;
    }
    
    System.out.println(x);
    Se qualcosa è false cosa stampi? Boh.. devi quindi assicurarti di coprire tutti i rami

    ps: Usa il tag CODE
    Ciao e grazie per la risposta.

    Comunque io ho chiesto di dichiarare il valore della variabile ff usando la tastiera .. poi ho messo

    codice:
      if (ff==1)
    e cosi fino al valore massimo che mi interessava (5) .. nella stringa qui sopra,nel caso fosse vero esegue le operazioni dentro la stringa if,nel caso falso va avanti fino a che non trova quella vera ... sbaglio qualcosa ?

    Scusa ma ti parlo da informatica da 3a superiore,e avendo appena iniziato i dubbi sono più di uno .. grazie

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Ma infatti il compilatore ti sta segnalando che le variabili non inizializzate sono r1, r2, ecc... non ff.

    Il compilatore NON PUO' sapere se tali variabili verranno effettivamente inizializzate o meno: cosa accade, ad esempio, se l'utente inserisce il valore 3 per la variabile "ff" (Livello Fast Food)? Succede questo:

    1) La prima if è falsa, non viene eseguito il suo corpo.
    2) La seconda if è falsa, non viene eseguito il suo corpo.
    3) La terza if è vera. Viene inizializzato r3; la if al suo interno non potrà mai essere vera e non si capisce che ci faccia lì (perchè se ff == 3 non potrà mai essere uguale a 4).
    Poi viene eseguito if (r1 > r2)... ma r1 e r2 non sono mai state inizializzate: risultato indefinito.

    La regola aurea è: quando si dichiara una variabile locale la si deve sempre inizializzare.


    Ciao.
    Ultima modifica di LeleFT; 18-11-2014 a 16:27
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    74
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Ma infatti il compilatore ti sta segnalando che le variabili non inizializzate sono r1, r2, ecc... non ff.

    Il compilatore NON PUO' sapere se tali variabili verranno effettivamente inizializzate o meno: cosa accade, ad esempio, se l'utente inserisce il valore 3 per la variabile "ff" (Livello Fast Food)? Succede questo:

    1) La prima if è falsa, non viene eseguito il suo corpo.
    2) La seconda if è falsa, non viene eseguito il suo corpo.
    3) La terza if è vera. Viene inizializzato r3; la if al suo interno non potrà mai essere vera e non si capisce che ci faccia lì (perchè se ff == 3 non potrà mai essere uguale a 4).
    Poi viene eseguito if (r1 > r2)... ma r1 e r2 non sono mai state inizializzate: risultato indefinito.

    La regola aurea è: quando si dichiara una variabile locale la si deve sempre inizializzare.


    Ciao.
    Ah,ma che stupido !
    Quindi non devo mettere sotto forma di if la variabile "ff" senò nel caso una delle 4 fosse vera,quella successiva non sarebbe più calcolata..

    Ok,ho risolto semplicemente togliendo le if dove non servivano e adesso il programma sembra andare .. purtroppo non me lo compila il mio cmd,mi da un'errore... apro un altro thread sempre su questo forum che è molto veloce la risposta e siete sicuramente molto competenti ...

    Grazie per avermi fatto capire l'errore

  6. #6
    ma invece di togliere le if (che sicuramente servivano a qualcosa se le avevi messe li) non potevi INIZIALIZZARE le variabili?
    codice:
    double r1=0.0, r2=0.0, r3=0.0, r4=0.0;
    E avevi finito.



    Ciao.
    Ultima modifica di schumy2000; 18-11-2014 a 18:40
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    74
    Quote Originariamente inviata da schumy2000 Visualizza il messaggio
    ma invece di togliere le if (che sicuramente servivano a qualcosa se le avevi messe li) non potevi INIZIALIZZARE le variabili?
    codice:
    double r1=0.0, r2=0.0, r3=0.0, r4=0.0;
    E avevi finito.



    Ciao.
    si potevo farlo,ma nel mio caso bastava solo togliere le if che erano inutili,avevo solo fatto un'errore ..
    E si nel caso fossero servite con gli if bastava fare come hai detto te

    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.