
Originariamente inviato da
LordGiotto
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:
Questo viene compilato tranquillamente, in quanto il compilatore si rende conto che entrerà in ogni caso all'interno del ramo if.
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à
