CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: megthebest con ben 1 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: carotix con ben 4 Thanks ricevuti negli ultimi sette giorni
Utente del mese: megthebest con ben 21 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 4 su 4
Discussione:

Aiuto Java: Variable might not have been initialized

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Senior Droid L'avatar di cavaz


    Registrato dal
    Sep 2009
    Località
    Verona
    Messaggi
    306
    Smartphone
    Galaxy S4 I9505

    Ringraziamenti
    13
    Ringraziato 41 volte in 25 Posts
    Post

    Aiuto Java: Variable might not have been initialized

    Ciao a tutti.
    Scrivo qua perché so che la programmazione di Android si basa anche su Java e quindi qualcuno di voi probabilmente potrà risolvere questo mio problema.
    Ho provato a fare un programma in Java che, dato in input 3 numeri a piacere, visualizza la media di questi tre, la radice del più grande e la differenza tra il più grande e il più piccolo.
    Il programma è il seguente:
     
    1
    import javax.swing.*;
    2
    public class MediaDifferenzaRadice{
    3
     public static void main (String args[]){
    4
         JOptionPane.showMessageDialog(null,"Questo programma mostra la Media, la Differenza tra il più grande \n e il più piccolo e la Radice quadrata del più grande tra 3 numeri inseriti");
    5
         double a=Double.parseDouble(JOptionPane.showInputDialog(null,"Inserire il primo numero"));
    6
         double b=Double.parseDouble(JOptionPane.showInputDialog(null,"Inserire il secondo numero"));
    7
         double c=Double.parseDouble(JOptionPane.showInputDialog(null,"Inserire il terzo numero"));
    8
         double m;
    9
         double r;
    10
         double d;
    11
         m=(a+b+c)/3;
    12
         if (a>=b&&a>=c){
    13
             r=Math.pow(a,0.5);
    14
            }
    15
            else{
    16
                if(b>=a&&b>=c){
    17
                    r=Math.pow(b,0.5);
    18
                }
    19
                else{
    20
                    if(c>=a&&c>=b){
    21
                        r=Math.pow(c,0.5);
    22
                    }
    23
                }
    24
            }
    25
        if(a>=b&&b>=c){
    26
            d=a-c;
    27
        }
    28
        else{
    29
            if(b>=a&&c>=a){
    30
                d=b-a;
    31
            }
    32
            else{
    33
                if(c>=a&&b>=a){
    34
                    d=c-a;
    35
                }
    36
                else{
    37
                    if(a>=b&&c>=b){
    38
                        d=a-b;
    39
                    }
    40
                    else{
    41
                        if(c>=a&&a>=b){
    42
                            d=b-c;
    43
                        }
    44
                        else{
    45
                            if(c>=a&&a>=b){
    46
                                d=c-b;
    47
                            }
    48
                        }
    49
                    }
    50
                }
    51
            }    
    52
        }  
    53
            System.out.println("Media= "+m+"\nRadice= "+r+"\nDifferenza= "+d);
    54
        
    55
    }
    56
    }

    L'errore che riscontro è quello del titolo, ovvero più precisamente:
    Variable r might not have been initialized
    Nella seguente stringa:
    System.out.println("Media= "+m+"\nRadice= "+r+"\nDifferenza= "+d);
    Chiunque mi possa fornire aiuto lo ringrazierò infinitamente
    P.S. Non c'è un modo di mettere un testo tra spoiler in questo forum?

  2.  
  3. #2
    Senior Droid


    Registrato dal
    Sep 2009
    Località
    Castelnovo di sotto (RE)
    Messaggi
    682

    Ringraziamenti
    16
    Ringraziato 17 volte in 17 Posts
    Predefinito

    Credo che basti dare un valore a r quando la dichiari, al posto di

    double r;

    prova a mettere:

    double r=0;

    Se il valore 0 non ti da fastidio...
    Trae maggiormente un crine di femminil pertugio che una vettura a propulsion bovina

  4. #3
    Senior Droid L'avatar di LordGiotto


    Registrato dal
    Oct 2009
    Messaggi
    369

    Ringraziamenti
    10
    Ringraziato 36 volte in 22 Posts
    Predefinito

    Esattamente come ha detto manu87.
    In pratica cosa succede: alla riga 09 tu dichiari la variabile double r, ma non la inizializzi. La variabile r verrà inizializzata all'interno dei diversi if che hai indicato (righe 13, 17 e 21), ma il compilatore non può sapere a priori se entrerai mai in quel ramo if, quindi ti segnala errore.


    Ti faccio due esempi all'apparenza molto simili:

    x
     
    1
    class prova {
    2
        public static void main (String[] args) {
    3
            double b;
    4
            if (true)
    5
                b = 5.3;
    6
            System.out.println(b);
    7
        }
    8
    }
    9


    Questo viene compilato tranquillamente, in quanto il compilatore si rende conto che entrerà in ogni caso all'interno del ramo if.

    9
     
    1
    class prova {
    2
        public static void main (String[] args) {
    3
            double a=3;
    4
            double b;
    5
            if (a==3)
    6
                b = 5.3;
    7
            System.out.println(b);
    8
        }
    9
    }


    In questo caso, invece, si riceve l'errore prova.java:7: variable b might not have been initialized, in quanto il compilatore non può saper a priori se a ==3 (malgrado sia evidente che questo codice sia concettualmente identico a quello precedente). Se a==3 si scoprirà in fase di interpretazione.

    Figurati nel tuo caso, dove a, b, c devono esser indicate dall'utente... Se l'utente invece di indicare 3 double scrivesse "ciao" "come" "stai", l'interprete non entrerebbe mai negli if e r non sarebbe mai inizializzata
    Stesso discorso per la variabile d.

    Per ovviare il problema puoi inizializzare la variabile in fase di dichiarazione come ha detto manu87:
    double r = 0;
    double d = 0;


    Spero ti sia utile

    P.S. Se posso darti un consiglio: usa gli else if al posto di if annidati in rami else come hai fatto ora... Guadagni molto in leggibilità
    ___________
    *Htc Tattoo venduto con soddisfazione*
    *Htc Magic ceduto a mia sorella*
    LG OPTIMUS BLACK
    CyanogenMod Nightly

    Non sopporto chi non ha senso critico, chi parla senza argomentare e vende ogni sua "verità" con spocchiosa arroganza...
    Se avete il dubbio di rientrare in questa categoria, non replyate ai miei post, grazie :P


  5. #4
    Senior Droid L'avatar di cavaz


    Registrato dal
    Sep 2009
    Località
    Verona
    Messaggi
    306
    Smartphone
    Galaxy S4 I9505

    Ringraziamenti
    13
    Ringraziato 41 volte in 25 Posts
    Predefinito

    Quote Originariamente inviato da LordGiotto Visualizza il messaggio
    Esattamente come ha detto manu87.
    In pratica cosa succede: alla riga 09 tu dichiari la variabile double r, ma non la inizializzi. La variabile r verrà inizializzata all'interno dei diversi if che hai indicato (righe 13, 17 e 21), ma il compilatore non può sapere a priori se entrerai mai in quel ramo if, quindi ti segnala errore.


    Ti faccio due esempi all'apparenza molto simili:

    9
     
    1
    class prova {
    2
        public static void main (String[] args) {
    3
            double b;
    4
            if (true)
    5
                b = 5.3;
    6
            System.out.println(b);
    7
        }
    8
    }
    9


    Questo viene compilato tranquillamente, in quanto il compilatore si rende conto che entrerà in ogni caso all'interno del ramo if.

    9
     
    1
    class prova {
    2
        public static void main (String[] args) {
    3
            double a=3;
    4
            double b;
    5
            if (a==3)
    6
                b = 5.3;
    7
            System.out.println(b);
    8
        }
    9
    }


    In questo caso, invece, si riceve l'errore prova.java:7: variable b might not have been initialized, in quanto il compilatore non può saper a priori se a ==3 (malgrado sia evidente che questo codice sia concettualmente identico a quello precedente). Se a==3 si scoprirà in fase di interpretazione.

    Figurati nel tuo caso, dove a, b, c devono esser indicate dall'utente... Se l'utente invece di indicare 3 double scrivesse "ciao" "come" "stai", l'interprete non entrerebbe mai negli if e r non sarebbe mai inizializzata
    Stesso discorso per la variabile d.

    Per ovviare il problema puoi inizializzare la variabile in fase di dichiarazione come ha detto manu87:
    double r = 0;
    double d = 0;


    Spero ti sia utile

    P.S. Se posso darti un consiglio: usa gli else if al posto di if annidati in rami else come hai fatto ora... Guadagni molto in leggibilità
    Grazie mille della spiegazione, molto chiara.
    Ho iniziato Java da neanche due mesi e certi consigli mi sono molto utili.
    Ringrazio entrambi, anche manu87.
    Sul tardi proverò a fare come mi avete suggerito

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy