Qui trovi un insieme di esercizi che ti permetteranno di metterti alla prova conl'uso di attributi e metodi statici, nonché la creazione di attributi e metodi statici di una classe.
Realizza la tua soluzione e poi confronta la tua soluzione con quella proposta dal professore.
Esercizi sull'uso e la progettazione degli attributi e dei metodi static in Java
Vediamo due classi a confronto: la classe Math con attributi e metodi statici e la classe Random che ha solo metodi pubblici.
Documentazione ufficiale della classe Math: https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html
Documentazione ufficiale della classe Random: https://docs.oracle.com/javase/8/docs/api/java/util/Random.html
Esercizio 1: Livello di abilità di un personaggio
Il livello di abilità di un personaggio nel videogioco preferito da Alice si calcola con la seguente formula:
Creare un programma direttamente nel metodo main che possa chiedere all'utente di inserire i punti ottenuti, i livelli completati ed il tempo di gioco, in modo da poter calcolaere il livello di abilità.
Esercizio 2: La classe Personaggio
Creare la classe Personaggio che sia in grado di rappresentare un personaggio del videogioco preferito da Alice. Gli attributi della classe devono essere nome, puntiOttenuti, livelliCompletati e tempoGioco.
Nella classe implementare i seguenti metodi:
costruttore di default, parametrizzato e di copia
metodi get, set, toString, inserisciDati.
metodo livelloAbilità che calcola il livello di abilità di un oggetto di tipo Personaggio con la formula dell'esercizio precedente.
metodo personaggioPotente che ritorna true se il personaggio ha un livello di abiltà maggiore di 3
metodo migliorPersonaggio che confronta tre personaggi e restituisce il nome del miglore o dei migliori personaggi (in caso di parità di livello abilità massima.
Nel metodo main:
creare tre oggetti di tipo Personaggio con il costruttore di default ed i valori inseriti da tastiera.
indicare il livello di abilità di tutti e tre;
stampare i nomi dei personaggi potenti;
indicare quale dei tre personaggi è il migliore.
Esercizio 3: La classe Pianeta (metodi non statici)
Creare la classe Pianeta che sia in grado di rappresentare un pianeta del sistema solare. Gli attributi della classe devono essere nome, massa, raggio e distanzaDalSole.
Nella classe implementare i seguenti metodi:
costruttore di default, parametrizzato e di copia
metodi get, set, toString.
metodo distanzaMedia che confronta tre pianeti e calcola il valore medio delle distanze dal sole dei tre pianeti.
metodo varianzaDistanza che confronta tre pianeti e calcola la varianza della distanza dei tre pianeti.
metodo deviazioneDistanza che confronta tre pianeti e restituisce il valore della deviazione standard della distanza dal sole dei tre pianeti.
Nel metodo main:
creare tre oggetti di tipo Pianeti che rappresentano i tre pianeti riportati in figura. Usare il costruttore parametrizzato con valori hard coded.
stampare a schermo i tre oggetti creati;
stampare a schermo la distanza media dal sole dei tre pianeti;
stampare a schermo la varianza della distanza media dal sole dei tre pianeti.
stampare a scehermo la deviazione standard della distanza media dal sole dei tre pianeti.
Varianza: può assumere solo valori ≥ 0 (mai negativa). Più è grande, più i valori sono dispersi rispetto alla media.
Deviazione standard: anch’essa ≥ 0, sempre nella stessa unità dei dati; zero significa che tutti i valori sono uguali alla media.
Esercizio 4: Estensione della classe Pianeta (metodi statici)
Estendere la classe Pianeta creata nel precedente esercizio con i seguenti metodi statici:
metodo statico massaMedia che confronta tre pianeti e calcola il valore medio delle masse dei tre pianeti.
metodo statico varianzaMassa che confronta tre pianeti e calcola la varianza delle masse dei tre pianeti.
metodo deviazioneMassa che confronta tre pianeti e restituisce il valore della deviazione standard delle masse dei tre pianeti.
Estendere il metodo main:
stampare a schermo la massa media dei tre pianeti;
stampare a schermo la varianza della massa dei tre pianeti.
stampare a scehermo la deviazione standard della massa dei tre pianeti.
Esercizio 5: Gara di corsa
Si vuole realizzare un'applicazione per un nuovo evento di corsa da proporre nel proprio quartiere, che deve tenere traccia delle diverse tipologie di gare a cui gli atleti potranno iscriversi.
In particolare, ogni singola Gara è caratterizzata dal proprio nome, dalla lunghezza espressa in km e dalla durata massima entro la quale terminare la corsa.
Invece, tutte le gare condividono alcune caratteristiche, infatti a prescindere dalla singola gara è previsto che gli atleti:
siano obbligatoriamente tesserati alla FIDAL;
paghino un costo d'iscrizione pari a 10€.
Per la classe Gara prevedere anche:
un attributo static in grado di memorizzare il numero di oggetti di tipo Gara che verranno creati;
un metodo che sia in grado di calcolare la velocità più bassa che un atleta dovrebbe sostenere per poter completare la gara in tempo.
Inoltre, tale applicazione deve poter calcolare il consumo di calorie di un atleta sapendo che "a qualunque livello venga praticata, la corsa consente di bruciare 900cal per kg di peso corporeo al chilometro. In altri termini un soggetto di 100kg consuma circa 90000cal ogni chilometro percorso. Il consumo calorico della camminata è invece inferiore, pari a circa 500cal per kg per km" (fonte qui).
Per poter fare ciò si realizzi un metodo static che calcoli il numero di calorie bruciate partendo dai seguenti dati: il peso (kg), la lunghezza del percorso (km) ed il tipo di attività corsa/camminata.
Nel metodo main effettuare le seguenti istruzioni:
Creare due oggetti di tipo Gara con le seguenti proprietà:
gara "EasyFive", di lunghezza 5km, da percorrere entro il limite massimo di 70minuti;
gara "EasyTen", di lunghezza 10 km, da percorrere entro il limite massimo di 120minuti.
All'interno di un ciclo do-while consentire all'utente di creare un numero arbitrario di gare e prevedere una condizione di uscita dal ciclo.
Mostrare a schermo il numero totale di gare che sono state create;
All'interno di un secondo ciclo do-while consentire all'utente di calcolare il numero di calorie che brucerebbe in una gara sulla base del peso, dei km e della tipologia di attività corsa/camminata.
Esercizio 6: Runner e Gara
Ampliare il precedente esercizio permettendo all'applicazione di tenere traccia dei "Runner" che intendono partecipare a tale manifestazione. In particolare, per ogni runner si vuole tenere traccia del nome, se maschio o femmina, la data di nascita e la gara a cui intende partecipare.
Per la classe Runner prevedere:
un attributo static in grado di memorizzare il numero di oggetti Runner che verranno creati;
un metodo static che prenda come parametro la distanza da percorrere in una gara ed il tempo in cui la si vorrebbe completare. Tale metodo deve poter restituire la velocità media (espressa in km/orari) che il corridore deve sostenere per completare l'intero percorso nel tempo prestabilito.
Nel metodo main effettuare le seguenti istruzioni:
Creare due oggetti g1 e g2 di tipo Gara. L'oggetto g1 deve avere le caratteristiche della "EasyFive", mentre g2 quelle di "EasyTen" (vedi es. 1).
Stampare a schermo le informazioni relative alle due gare a cui i runners possono partecipare;
All'interno di un ciclo iterativo di tipo do-while far creare all'utente un nuovo runner. Nella creazione del Runner tenere conto che ogni runner può gareggiare solamente o alla EasyFive o alla EasyTen. Infine, chiedere in quanto tempo tale runner vorrebbe concludere la gara in modo tale da mostrargli la velocità media che dovrà sostenere per raggiungere il suo obiettivo. (Prevedere una condizione di uscita dal do-while)
Infine, mostrare a schermo quante gare e quanti runners sono stati creati.
N.B. Il numero di gare create alla fine del programma dovrebbero essere solo le 2 iniziali g1 e g2.
Esercizio 7: Classe Dipendente
Si realizzi la classe Dipendente di cui si è interessati a tenere traccia del nome, dello stipendio base e dello stipendio extra che riceve in base agli anni di servizio. Per tale classe prevedere:
un attributo statico che possa tenere traccia del numero di oggetti di tipo Dipendente che vengono creati;
un metodo in grado di calcolare lo stipendio totale di un dipendente;
un metodo che confronta due oggetti di tipo dipendente e ritorna il nome del dipendente con stipendio totale maggiore;
un metodo statico aumentoPercentuale che prende come parametri il valore di uno stipendio ed il valore della percentuale di quanto si voglia aumentare tale stipendio. Il metodo ritorna il valore che lo stipendio maggiorato della percentuale.
Si realizzi un metodo main in cui:
All'interno di un ciclo do-while creare:
a. Due oggetti di tipo Dipendente (input da tastiera);
b. Mostrare a schermo le informazioni dei due dipendenti creati, specificando il nome del dipendente che ha lo stipendio maggiore;
c. Chiedere all'utente se vuole inserire altri due dipendenti, altrimenti uscire dal do-while
Indicare quanti oggetti di tipo Dipendente sono stati creati.
All'interno di un ciclo do-while, avviare una sessione di simulazione in cui l'utente possa inserire (da tastiera) il suo attuale stipendio e la percentuale di quanto vorrebbe vedere aumentato il proprio stipendio. Il programma deve mostrare all'utente l'importo dello stipendio aumentato della percentuale. Prevedere una condizione di uscita dal do-while.