PDA

View Full Version : [Java] totalizzatore


manuel 66
06-02-2011, 18:04
da circa 1-2 mesetti ho iniziato a studiare java, esercitandomi.
il problema e questo, creo un progetto per calcolare la media dei voti, ma il tatalizzatore non funziona, com'e possibile ?
lo lancio da console e mi manda 2 errori, se tolgo il totalizzatore va tutto bene, ma naturalmente non trovo quello che voglio.
sapreste dirmi cosa sbaglio ??


import javax.swing.JOptionPane;

class voti {
private static Float v,tot;
private static int c;

public static void main(String[] args) {
voti a=new voti();
a.ins();
}


public void ins() {
v=Float.parseFloat(JOptionPane.showInputDialog("scrivi il " + (c+1) + "° voto"));
if (v>0 && v<=10) {
JOptionPane.showMessageDialog(null,"voto inserito");
c++;
tot=tot+v; <---------------------------------------questo e il totalizzatore incriminato
r();
}else{
JOptionPane.showMessageDialog(null,"voto errato, riprova");
ins();
}
}
}

banryu79
07-02-2011, 00:30
Il problema è che il tipo Float non è una variabile primitiva del linguaggio (come ad esempio float) ma un "oggetto". E il valore di default di un oggetto dichiarato ma non esplicitamente inizializzato è null.

Quindi quando tu dichiari 'v' e 'tot' essi valgono null.
Poi, da codice 'v' viene inizializzato:

...
v=Float.parseFloat(JOptionPane.showInputDialog("scrivi il " + (c+1) + "° voto"));

mentre quando usi 'tot' per la prima volta esso vale ancora null:

...
tot=tot+v;

e il compilatore non sa che pesci pigliare nel momento in cui gli chiedi di sommare tot (che vale null) a v.

Risolvi semplicemente inizializzando tot a un valore, ad esempio zero:

private static Float v, tot = 0f;

La 'f' dopo lo zero è neccessaria perchè zero da solo è un valore letterale di tipo int, e non verrebbe accettato, è neccessario assegnare un tipo float.

manuel 66
07-02-2011, 14:17
grazie, ho provato e funziona, il fatto e che sono troppo abituato al vb.net