Ricevo da uno studente la mail seguente:
public class Studenti
{
int counter;
double media;
int voto;
int totale;
public void calcolare()
{
Scanner input=new Scanner(System.in);
for(int counter=1; counter<=5; counter++)
{
System.out.print(”voto:”);
System.out.print(”");
voto=input.nextInt();
totale=totale +voto;
media=totale/5;
}
System.out.println(”la media è:”+media);
}
}
——————————–
La soluzione proposta è quasi corretta e compila perfettamente.
C’è un solo errore: la media (istruzione media=totale/5;) va calcolata alla fine del ciclo for in quanto non ha senso calcolarla 5 volte. In pratica bisogna spostare l’istruzione in questione dopo la parentesi chiusa che la segue al momento.
Ricordo inoltre in genere è bene mettere un metodo main che avvii il comportamento del programma. Questo è obbligatorio quando l’esercizio richiede la realizzazione di un programma e non di una classe (che è una parte di un programma più ampio).
Professore, ma tale esercizio non si potrebbe risolvere introducendo 5numeri da tastiera e calcolare la media senza utilizzare il ciclo for?
risolto in questa maniera va bene??
import javax.swing.JOptionPane;
public class Media
{
private int a;
private int b;
private int c;
private int d;
private int e;
private double total;
private double risultato;
public double calcolomedia()
{
String input;
input=JOptionPane.showInputDialog(”Inserisci primo numero:”);
a=Integer.parseInt(input);
input=JOptionPane.showInputDialog(”Inserisci secondo numero:”);
b=Integer.parseInt(input);
input=JOptionPane.showInputDialog(”Inserisci terzo numero:”);
c=Integer.parseInt(input);
input=JOptionPane.showInputDialog(”Inserisci quarto numero:”);
d=Integer.parseInt(input);
input=JOptionPane.showInputDialog(”Inserisci quinto numero:”);
e=Integer.parseInt(input);
total=a+b+c+d+e;
risultato=total/5;
JOptionPane.showMessageDialog(null, “La media è:”+risultato, “Risultato”, JOptionPane.INFORMATION_MESSAGE);
return total;
}
public static void main(String args[])
{
Media ciao=new Media();
ciao.calcolomedia();
}
}
professore io questo esercizio l’ho svolto, però mi considera come totale soltanto l’ultimo valore che assegno a voto.
import java.util.Scanner;
public class Voto
{
private int totale;
private int a;
public void calcola()
{
for(int i=1;i<=5;i++)
{
Scanner in = new Scanner(System.in);
System.out.println(”voto:”);
a=in.nextInt();
}
totale =totale+a;
double media;
media=totale/5;
System.out.println(”la media è:”+media);
}
public static void main(String args[])
{
Voto io= new Voto();
io.calcola();
}
anna cosi viene bene
import java.util.Scanner;
public class Voto
{
private int totale;
private int a;
private double media;
public void calcola()
{
for(int i=1;i<=5;i++)
{
Scanner in = new Scanner(System.in);
System.out.println(”voto:”);
a=in.nextInt();
totale =totale+a;
}
media=totale/5;
System.out.println(”la media è:”+media);
}
public static void main(String args[])
{
Voto io= new Voto();
io.calcola();
}
}
Rispondo a Graffeo:
la soluzione proposta è stilisticamente poco adatta. Non bisogna ripetere più volte porzioni di codice simili (in cui si possono inserire errori ad esempio di copia/incolla).
Molto, molto meglio mettere una piccola porzione di codice in grado di fare il lavoro di tutte le altre. Da questo punto di vista preferisco la soluzione precedente.
Rispondo a Anna.Ciaccio:
Lei non aggiorna mai il valore della variabile totale dentro il ciclo di lettura dei voti. Lo fa fuori e alla fine, per questo le considera l’ultimo voto soltanto.
Basta cambiare le sequenti righe di codice:
a=in.nextInt();
}
totale =totale+a;
in questo modo:
a=in.nextInt();
totale =totale+a;
}
Le ricordo inoltre che è sempre bene inizializzare esplicitamente le variabili (per esempio totale va inizializzata a 0)