Esercizio nuoto
Quella cghe vogliamo creare è una applicazione che permetta ad un allenatore di una squadra di nuoto di vedere quanti dei suoi atleti hanno fatto dei tempi troppo alti rispetto ad un tempo specifico che decide l'allenatore.
Rispetto a quanto visto finora introduciamo una piccola variante: l'allenatore all'inizio decide quanti tempi vuole immettere e li immette uno alla volta.
Al momento di scrivere il programma non so quanto dovrà essere grande il vettore, in questo caso si rimanderà l'allocazione della memoria (sarebbe a dire la creazione del vettore) a quando si saprà la grandezza, cioè dopo che l'utente l'avrà comunicata scrivendola in una casella e premendo il pulsante corrispondente:
public class Piscina extends Application {
TextField cNumeroTempi = new TextField();
TextField cTempo = new TextField();
Button pCreaVettore = new Button("inserisci numero tempi");
int tempi[];
@Override
public void start(Stage primaryStage) {
/* Quanto necessario per sistemare l'interfaccia grafica */
pCreaVettore.setOnAction( e -> alloca());
}
public void alloca() {
int numTempi= Integer.parseInt(cNumeroTempi.getText());
tempi = new int[numTempi];
}
}
La parte vista finora ci permette soltanto di creare (allocare spazio in memoria) il vettore tempi della dimensione adatta a poter contenere tutti i tempi che l'allenatore misurerà.
Una volta creato il vettore dobbiamo caricarlo (riempirlo di valori): per poter inserire i valori uno alla volta ci serve una variabile in più per tener conto del posto del vettore in cui dobbiamo inserire ciascun tempo: la chiamiamo posizione.
L'allenatore inserisce un tempo alla volta in una casella di testo: inserirà tale tempo, poi premerà il pulsante e il numero che avrà inserito sarà aggiunto a quelli immessi in precedenza. Ogni numero che inserirà andrà inserito nella posizione seguente a quella in cui è stato immesso il precedente. Tale azione la svolgeremo ogni volta che l'utente premerà il relativo pulsante, per questo useremo la variabile posizione.
public class Piscina extends Application {
TextField cNumeroTempi = new TextField();
TextField cTempo = new TextField();
Button pCreaVettore = new Button("inserisci numero tempi")
int tempi[];
Button pInserisci = new Button("inserisci tempo");
int posizione;
@Override
public void start(Stage primaryStage) {
/* Quanto necessario per sistemare l'interfaccia grafica */
pCreaVettore.setOnAction( e -> alloca());
pInserisci.setOnAction( e -> inserisciTempo());
}
public void alloca() {
int numTempi= Integer.parseInt(cNumeroTempi.getText());
tempi = new int[numTempi];
posizione = 0;
}
public void inserisciTempo() {
if(posizione < tempi.length) {
tempi[posizione] = Integer.parseInt(cTempo.getText());
posizione++;
cTempo.setText(""); // pulisco la casella
}
}
}
Fatto il caricamento, dobbiamo indicare in una casella di testo quanti sono i tempi superiori
a quello previsto dal coach.
Risolviamo il problema col
seguente algoritmo: confronto ciascun tempo a partire dal primo fino all'ultimo con quello
del coach. Ogni volta che il tempo risulta superiore incrementerò di 1 un contatore.
Alla fine mostrerò il risultato in una specifica casella di testo. Il codice:
public class Piscina extends Application {
TextField cNumeroTempi = new TextField();
TextField cTempo = new TextField();
Button pCreaVettore = new Button("inserisci numero tempi")
int tempi[];
Button pInserisci = new Button("inserisci tempo");
int posizione;
TextField cCoach = new TextField();
Button pLenti = new Button("conta lenti");
@Override
public void start(Stage primaryStage) {
/* Quanto necessario per sistemare l'interfaccia grafica */
pCreaVettore.setOnAction( e -> alloca());
pInserisci.setOnAction( e -> inserisciTempo());
pLenti.setOnAction( e -> contaLenti());
}
public void alloca() {
int numTempi= Integer.parseInt(cNumeroTempi.getText());
tempi = new int[numTempi];
posizione = 0;
}
public void inserisciTempo() {
if(posizione < tempi.length) {
tempi[posizione] = Integer.parseInt(cTempo.getText());
posizione++;
cTempo.setText(""); // pulisco la casella
}
}
public void contaLenti() {
int contatore;
int coach = Integer.parseInt(cCoach.getText());
contatore = 0;
for(int indice = 0; indice < tempi.length; indice++) {
if(tempi[indice] > coach) {
contatore++;
}
}
eRisultati.setText("" + contatore);
}
}
Per una squadra di calcio viene data una casella di testo tSquadra1
, una casella di testo
tPuntiSquadra1
con relativo pulsante inserisciRisultato1
ed in modo simmetrico per la seconda squadra di
calcio la casella tSquadra2
, tPuntiSquadra2
e inserisciRisultato2
. Si inserisce
nella casella di testo del punteggio il valore 0
se la squadra ha perso; il punteggio 1
se ha pareggiato ed in fine 2
se ha vinto. Tali valori si devono inserire per le ultime 5 partite, quindi ti dovrai appoggiare ad un vettore per la prima squadra ed un altro per la
seconda. Proprio come detto sopra, quando l'utente premerà il pulsante, il vecchio risultato si dovrà cancellare per facilitare l'immissione del nuovo.
Aggiungi ora una casella di testo per fornire il risultato (tRisultato
) ed il relativo pulsante per calcolarlo
(calcolaRisultato
): scrivere il nome della squadra che ha maggiore probabilità di vincere uno scontro diretto (confronta le somme).