Java example: constructor

La valutazione annuale di uno studente di scuola media è basata sui voti conseguiti dallo studente nelle verifiche scritte e nelle interrogazioni orali.

Ogni voto viene descritto da un oggetto della classe Voto, così strutturata:

  • un attributo privato contenente il valore del voto in decimi e frazioni
  • un attributo privato contenente la tipologia del voto, cioè se è un voto scritto o orale
  • un costruttore che prende come parametri valore del voto e tipologia e li assegna agli attributi corrispondenti; se il voto è fuori dall’intervallo consentito lo riporta al valore più vicino (esempio: 12 diventa 10, -3 diventa 0); se la tipologia non è un valore consentito il voto viene considerato un voto conseguito allo scritto
  • un metodo che restituisce il valore del voto
  • un metodo che restituisce il tipo di voto

Scrivere poi una classe che rappresenta uno studente delle medie come una sequenza di voti, al massimo 50. La classe deve prevedere:

  • un attributo contenente (la sequenza di) tutti i voti conseguiti dallo studente
  • un attributo contenente il numero totale di voti conseguiti dallo studente
  • un costruttore che inizializza opportunamente la sequenza dei voti conseguiti e il numero dei voti conseguiti
  • un metodo che ha come parametri il valore e la tipologia del voto conseguito e lo aggiunge alla sequenza di voti conseguiti dalo studente
  • un metodo che calcola e restituisce la media dei voti conseguiti solo allo scritto
  • un metodo che calcola e restituisce la media dei voti conseguiti solo all’orale
  • un metodo che calcola e restituisce la media di tutti i voti conseguiti (scritti o orali)
  • un metodo che restituisce true se lo studente si può promuovere (se la sua media voti è maggiore o uguale a 6) o false altrimenti

Scrivere un main che:

  • crea un nuovo oggetto che rappresenta uno studente
  • chiede all’utente di inserire i voti dello studente uno alla volta (valore del voto e poi tipo di voto)
  • se l’utente invece di inserire un voto inserisce la stringa “fine” la richiesta di inserimento termina e viene visualizzata la media dei voti dello studente

 

public class Voto {
	private float valoreVoto;
	private String tipoVoto;
	
	public Voto(float p_valore,String p_tipo){
		valoreVoto=p_valore;
		if(p_valore<0)
			valoreVoto=0;
		if(p_valore>10)
			valoreVoto=10;
		if((!p_tipo.equals("scritto"))&&(!p_tipo.equals("orale"))){
			tipoVoto="scritto";
		}
	}
	
	public float restValore(){
		return valoreVoto;
	}
	
	public String restTipo(){
		return tipoVoto;
	}
}
import java.util.Scanner;

public class StudenteMedie {
	public Voto[] sequenzaDeiVoti;
	public int numeroTotaleDeiVotiConseguitiFinoAdOra;

	public StudenteMedie() {
		sequenzaDeiVoti = new Voto[50];
		numeroTotaleDeiVotiConseguitiFinoAdOra = 0;
	}

	public void aggiungiNuovoVoto(float valoreDelNuovoVoto, String tipoDelNuovoVoto) {
		Voto nuovoVoto;
		if (numeroTotaleDeiVotiConseguitiFinoAdOra < 50) {
			nuovoVoto = new Voto(valoreDelNuovoVoto, tipoDelNuovoVoto);
			sequenzaDeiVoti[numeroTotaleDeiVotiConseguitiFinoAdOra] = nuovoVoto;
			numeroTotaleDeiVotiConseguitiFinoAdOra = numeroTotaleDeiVotiConseguitiFinoAdOra + 1;
		}
	}

	public float calcolaMediaScritti() {
		float sommaTotaleVotiScritti;
		int contatore;
		sommaTotaleVotiScritti = 0;
		contatore = 0;
		while (contatore < numeroTotaleDeiVotiConseguitiFinoAdOra) {
			if (sequenzaDeiVoti[contatore].restTipo().equals("scritto")) {
				sommaTotaleVotiScritti = sommaTotaleVotiScritti + sequenzaDeiVoti[contatore].restValore();
			}
			contatore = contatore + 1;
		}
		if(numeroTotaleDeiVotiConseguitiFinoAdOra>0)
			return sommaTotaleVotiScritti/numeroTotaleDeiVotiConseguitiFinoAdOra;
		else
			return 0;
	}

	public float calcolaMediaTutti() {
		float sommaTotaleVoti;
		int contatore;
		sommaTotaleVoti = 0;
		contatore = 0;
		while (contatore < numeroTotaleDeiVotiConseguitiFinoAdOra) {
			sommaTotaleVoti = sommaTotaleVoti + sequenzaDeiVoti[contatore].restValore();
			contatore = contatore + 1;
		}
		if(numeroTotaleDeiVotiConseguitiFinoAdOra>0)
			return sommaTotaleVoti/(float)numeroTotaleDeiVotiConseguitiFinoAdOra;
		else
			return 0;
	}

	public boolean promosso() {
		if(calcolaMediaTutti()>=6)
			return true;
		else
			return false;
	}

	public static void main(String [] args) {
		Scanner s;
		s=new Scanner(System.in);
		StudenteMedie stud=new StudenteMedie();
		String dato;
		float voto;
		String tipo;
		dato="";
		while(!dato.equals("fine")){
			System.out.print("inserire voto: ");
			dato=s.next();
			if(!dato.equals("fine")){
				voto=Float.parseFloat(dato);
				System.out.print("inserire tipo: ");
				tipo=s.next();
				stud.aggiungiNuovoVoto(voto, tipo);
			}
		}
		System.out.println("la media dei voti è: "+stud.calcolaMediaTutti());
	}

}