1. Dado Scrivere un programma che usi la classe Random per simulare il lancio di un dado, visualizzando un numero casuale compreso tra 1 e 6 ogni volta che viene richiesto. Per questo creare una classe Dado ed una classe TestaDado seguendo il seguente diagramma delle classi. La classe Dado deve permettere di creare un dado che possa avere avere da 6 a 10 facce, in modo da permettere di giocare con più tipi di dado. Classe Dado: Dado() - costruttore senza parametri: imposta il numero di facce a 6 come valore di default e crea l’oggetto generatore per generare numeri casuali. Dado(int nu)- costruttore che riceve in input il numero di facce desiderato: imposta il numero di facce con il numero ricevuto in input e crea l’oggetto generatore per generare numeri casuali. lancia() - il metodo ogni volta che è chiamato genera un numero intero casuale compreso tra 1 ed il numero delle sue facce utilizzando l’oggetto generatore e lo restituisce classe LanciaDado main() – chiede di digitare il numero di facce del dado che si vuole utilizzare e crea l’oggetto dado, poi in un ciclo chiede di digitare 1 per lanciare il dado o 2 per uscire. package dado; import java.util.Random ; public class Dado { private int numeroFacce; private Random gen; //costruttore che crea un dado standard a 6 facce public Dado() { numeroFacce = 6; // si inizializza l'oggetto gen della classe Random gen = new Random(); } //costruttore che crea un dado con il numero di facce richiesto public Dado(int numFacce) { numeroFacce = numFacce; // si inizializza l'oggetto gen della classe Random ITS A. Volta – programmazione java – Flavia Lollis 1 gen = new Random(); } //cambia il numero di facce del dado public void setFacce(int nuovoVal) { numeroFacce = nuovoVal; } /*simula il lancio del dado return il risultato del lancio*/ public int lancia() { int result = gen.nextInt(numeroFacce) + 1 ; return result; } } package dado; import java.util.Scanner; public class LanciaDado { public static void main(String[] args) { Dado da; Scanner leggi = new Scanner(System.in); int facce, risLancio, scelta; do { System.out.println("digita il numero di facce del dado (d 1 a 10)"); //utilizza la classe wrapper Integer per trasformare la stringa letta con leggi.nextLine() facce = Integer.parseInt(leggi.nextLine()); if (facce <1 || facce >10) { System.out.println("digitare un numero compreso tra 1 e 10"); } } while(facce <1 || facce >10); da = new Dado(facce); do { do { System.out.println("digita:"); System.out.println("1 per lanciare il dado"); System.out.println("2 per terminare il programma"); scelta = Integer.parseInt(leggi.nextLine()); if (scelta < 1 || scelta > 2) { System.out.println("valore non ammmesso"); } } while (scelta < 1 || scelta > 2); if (scelta == 1) { risLancio = da.lancia(); System.out.println("Lancio del dado a " + facce + " facce: " + risLancio); ITS A. Volta – programmazione java – Flavia Lollis 2 } } while (scelta == 1); } } 2. modifica gioco dado Modificare il programma precedente chiedendo con quanti dadi si vuole giocare, e simulare il lancio di tutti i dadi contemporaneamente, dando come risultato la somma dei lanci di ogni dado. La classe Dado rimane invariata Classe LanciaDadi: main() - chiede con quanti dadi si vuole giocare e poi esegue il costruttore passandogli il numero dei dadi. LanciaDadi(int nuDadi) - in un ciclo di nuDad volte chiede quante facce deve avere il dado e lo crea salvandolo nel vettore dei dadi, poi chiema il metodo menu() menu() - in un ciclo chiede se si vuole lanciare o uscire dal programma. Nel caso di lancio chiama il metodo lancia() lancia() - in un ciclo di nuDadi volte, esegue per ognuno dei dadi il metodo lancia() di ogni dado, somma tutti i risultati dei lanci e dà in output il risultato. package dado; import java.util.Random ; public class Dado { private int numeroFacce; private Random gen; //costruttore che crea un dado standard a 6 facce public Dado() { numeroFacce = 6; // si inizializza l'oggetto gen della classe Random gen = new Random(); ITS A. Volta – programmazione java – Flavia Lollis 3 } //costruttore che crea un dado con il numero di facce richiesto public Dado(int numFacce) { numeroFacce = numFacce; // si inizializza l'oggetto gen della classe Random gen = new Random(); } //cambia il numero di facce del dado public void setFacce(int nuovoVal) { numeroFacce = nuovoVal; } /*simula il lancio del dado return il risultato del lancio*/ public int lancia() { int result = gen.nextInt(numeroFacce) + 1 ; return result; } } package dado; import java.util.Scanner; public class LanciaDadi { Dado eleDadi[]; int numDadi; Scanner leggi = new Scanner(System.in); public static void main(String[] args) { Dado da; Scanner lettore = new Scanner(System.in); int numero; do { System.out.println("digita con quanti dadi vuoi giocare (da 1 a 5)"); //utilizza la classe wrapper Integer per trasformare la stringa letta con leggi.nextLine() numero = Integer.parseInt(lettore.nextLine()); if (numero <1 || numero > 5) { System.out.println("digitare un numero compreso tra 1 e 5"); } } while(numero <1 || numero > 5); new LanciaDadi(numero); } public LanciaDadi(int nu) { int facce; numDadi = nu; eleDadi = new Dado[nu]; for (int i=0; i<nu; i++) { ITS A. Volta – programmazione java – Flavia Lollis 4 System.out.println("digita quante facce ha il dado " + (i+1)); facce = Integer.parseInt(leggi.nextLine()); eleDadi[i] = new Dado(facce); } menu(); } public void menu(){ int scelta, risLancio=0; do { do { System.out.println("digita:"); System.out.println("1 per lanciare il dado"); System.out.println("2 per terminare il programma"); scelta = Integer.parseInt(leggi.nextLine()); if (scelta < 1 || scelta > 2) { System.out.println("valore non ammmesso"); } } while (scelta < 1 || scelta > 2); if (scelta == 1) { risLancio=lancia(); System.out.println("il lancio dei dadi ha dato somma = " + risLancio); } } while (scelta == 1); } public int lancia(){ int ris=0; for (int i=0; i<numDadi; i++) { ris = ris + eleDadi[i].lancia(); } return ris; } } ITS A. Volta – programmazione java – Flavia Lollis 5 3. Lampadina Costruire una lampadina che possa essere nello stato spenta, accesa o rotta, e cambia stando facendo click su un bottone; ogni lampadina può cambiare stato un numero prefissato di volte, e con il bottone daiStato si può sapere se è accesa, spenta o rotta. Inoltre la lampadina per default fa luce bianca, ma su richiesta può fare luce colorata: deve essere inoltre possibile sapere il colore della sua luce e quante volte ancora la si può accendere e spegnere. Classe lampadina: Lampadina(): costruttore senza parametri che crea una lampadina di luce bianca con numClick=10.Imposta stato=spenta, maxClick=10, contaClick=0, coloreLuce=bianco. Lampadina (numMax) : costruttore lampadina con numMax possibilità di click che fa luce bianca. Imposta stato=spenta,maxClick=numMax, contaClick=0, coloreLuce=bianca Lampadina(numero, colore): costruttore lampadina con numMax possibilità di click che fa luce co colore colore. Imposta stato=spenta, maxClick=numero, contaClick=0, coloreLuce=colore. click() : se stato=rotta dà una segnalazione di errore, altrimenti cambia lo stato della lampadina ed aumenta il contatore getNumClick() = restituisce il numero di click che sono stati fatti sulla lampadina ancoraClick() = restituisce il numero di click che ancora si possono fare (maxClick – contaClick) Classe Testa Lampadina: main() = deve chiedere i dati all’esecutore dei test (quanti click e colore della lampadina); Se non viene digitato nulla viene usato il primo costruttore. Se non viene digitato il colore o se il colore è bianco crea la lampadina con il secondo costruttore, altrimenti con il secondo. Realizza inoltre un ciclo che termina a richiesta dell’esecutore del test, nel quale l’esecutore del test può richiedere di fare alla lampadina le seguenti richieste: ITS A. Volta – programmazione java – Flavia Lollis 6 click dai stato lampadina dai colore dai quanti click posso ancora fare package illumina; import java.io.*; import java.util.*; public class TestaLampadine { public static void main(String[] args){ Scanner leggi = new Scanner(System.in); Lampadina la; String colo, let; int nClick, risp; do { System.out.println("vuoi scegliere alcune caratteristiche della lampadina?"); System.out.println("0 = no"); System.out.println("1 = si"); //leggo la riga digitata let = leggi.nextLine(); //* trasformo la riga letta in un numero intero risp = Integer.parseInt(let); if ((risp != 0) && (risp !=1)) { System.out.println("digitare 0 oppure 1"); } } while ((risp != 0) && (risp !=1)); if (risp == 0) { la = new Lampadina(); } else { System.out.println("digita quanti click farà la lampadina"); nClick=Integer.parseInt(leggi.nextLine()); System.out.println("digita il colore della luce"); colo=leggi.nextLine(); la = new Lampadina(nClick, colo); } String lett="", ret=""; while (!(lett.equals("u"))) { System.out.println(" System.out.println(" System.out.println(" fare ancora"); System.out.println(" System.out.println(" ITS A. Volta – programmazione java – Flavia Lollis per testare la lampadina digitare :"); c per fare click"); q per sapere quanti click si possono t per sapere lo stato della lamoadina"); u per uscire"); 7 lett=leggi.nextLine(); if (lett.equals("c") ) { ret = la.click(); if (!((ret).equals(""))) { System.out.println(ret); } } if (lett.equals("q") ) { System.out.println("si possono fare ancora "+ (la.getMaxClick()-la.getNumClick())+ " click"); } if (lett.equals("t") ) { System.out.println("la lampadina è "+la.daiStato()); } } } } package illumina; /** * Class Lampadina * fornisce una lampadina in grado di accendersi e spegnersi tramite un click. * La lampadina controlla il suo stato e se viene superato il massimo numero di click * passa allo stato di rotta e non si accende e spegne più * * */ public class Lampadina { private int stato, maxClick, contaClick; String coloreLuce; public Lampadina (){ /** * costruttore che imposta i valori di default */ maxClick=10; stato=0; contaClick=0; coloreLuce="bianco"; } public Lampadina (int m){ /** * costruttore che imposta il massimo numero click che può fare */ maxClick=m; stato=0; ITS A. Volta – programmazione java – Flavia Lollis 8 contaClick=0; coloreLuce="bianco"; } public Lampadina (int m, String c){ /** * costruttore che imposta il massimo numero click che può fare ed il colore della luce */ maxClick=m; stato=0; contaClick=0; coloreLuce=c; } public String click(){ String msg=""; contaClick++; switch (stato) { case 0 : //* lampadina spenta se è stato l'ultimo click si rompe, se no si accende if (contaClick == maxClick) { stato=2; msg="lampadina si è rotta facendo click"; } else { stato=1; msg="ho acceso la lampadina"; } break; case 1 : //* lampadina accesa se è stato l'ultimo click si rompe, se no si spegne if (contaClick == maxClick) { stato=2; msg="lampadina si è rotta facendo click "; } else { stato=0; msg="ho spento la lampadina"; } break; case 2 : msg="la lampadina è rotta non posso fare click"; break; } return msg; } public String daiStato(){ String st=""; switch (stato) { case 0: st="spenta"; ITS A. Volta – programmazione java – Flavia Lollis 9 break; case 1: st="accesa"; break; case 2: st="rotta"; break; } return st; } public int getStato(){ return stato; } public int getNumClick(){ return contaClick; } public int getMaxClick(){ return maxClick; } public int ancoraClick(){ return (maxClick - contaClick); } public void setColoreLuce(String co){ coloreLuce=co; } } ITS A. Volta – programmazione java – Flavia Lollis 10 4. Trapano Un trapano verticale si può muovere lungo le direzioni x,y di un piano per poi fermarsi ed eseguire un foro. Il trapano nasce con una punta di un diametro fissato, e un numero massimo di fori che per motivi di sicurezza si può fare con quella punta. L'operazione di foratura può avvenire solo a trapano acceso, mentre quella di traslazione lungo gli assi x y solo se il motore del trapano è spento. Realizza una classe Trapano che gestisca il funzionamento del trapano e permetta di sapere in ogni momento se il trapano è acceso o spento e in quale posizione si trova. Per testare la classe, scrivere un programma TestTrapano che permette di creare un’istanza della classe Trapano e di richiamare i metodi della stessa, in modo coerente. L’output, eseguito tramite System.out, deve essere presente solo nel programma di test. Descrizione metodi di Trapano 1)Trapano(pun, max) – costruttore che imposta le variabili globali punta e maxFori con i parametri ricevuti, azzera numFori, posiziona il trapano nell'origine degli assi ed inizializza lo stato del motore a spento 2)accendi() se il motore è spento lo accende, altrimenti dà messaggio 3)spegni() se il motore è acceso lo spegne, altrimenti dà messaggio 4)fora() controlla se il motore è acceso e se numero fori fatti < max fori: se sì esegue il foro, altrimenti dà messaggio accendi motore o cambia punta e spegne il motore 5)getStato() restituisce lo stato del motore; 6)sposta(sx, sy) se il motore è spento porta il trapano nella posizione di coordinate (sx, sy); se il motore è acceso lo spegne e poi esegue il posizionamento 7)getPosX() restituisce la posizione sull’asse x; ITS A. Volta – programmazione java – Flavia Lollis 11 8)getPosY() restituisce la posizione sull’asse y; descrizione main() di TestTrapano Interagisce con l'esterno per chiedere la dimensione della punta e le coordinate dei punti nei quali si vuole eseguire un foro, poi gestisce un ciclo chiede cosa si vuole fare: 1. accendi trapano 2. spegni trapano 3. sposta trapano 4. fora 5. dai posizione trapano (coordinate x e y) ITS A. Volta – programmazione java – Flavia Lollis 12 1. Modificare l'esercizio precedente in modo che il trapano esegua dei fori lungo il segmento che unisce i punti di coordinate (-1, -2) e (5, 4) 2. Modificare l'esercizio precedente in modo da usare due trapani con punte di dimensioni diverse eseguendo i fori lungo lo stesso segmento facendo i fori di dimensione maggiore nei punti di ascissa pari ITS A. Volta – programmazione java – Flavia Lollis 13 5. Squadra di baseball Scrivere una programma java per gestire una squadra di giocatori di basket. Per ciascun giocatore devono essere rilevati il nome come stringa, un punteggio che rappresenta il numero di canestri fatti in campionato, la sua data di nascita ed il suo peso. L’allenatore deve avere a disposizione un menù che gli permetta di: 1. inserire un nuovo giocatore rilevando tutti i suoi dati 2. eliminare un giocatore dopo averne indicato il nome 3. modificare il punteggio di un giocatore 4. avere l’elenco dei giocatori in ordine alfabetico 5. avere l’elenco dei giocatori in base al merito 6. uscire Un giocatore è migliore di un altro se ha un punteggio più alto. A parità di punteggio è considerato migliore il giocatore più giovane, a parità anche di età è migliore il giocatore che pesa di meno: si consiglia di utilizzare per l’ordinamento un metodo migliore(Giocatore g) che confronta l’oggetto stesso con l’oggetto giocatore ricevuto come parametro, cioé confronta il proprio punteggio con quello dell’altro oggetto, e se sono uguali confronta le date di nascita, e se sono uguali anche le date di nascita confronta il peso. NB: per calcolare l’età di un giocatore bisogna confrontare l’anno di nascita del giocatore con l’anno corrente. Il primo lo si estrae come sottostringa della data di nascita, per l’altro si può utilizzare la classe Calendar, una classe astratta che fornisce i metodi per manipolare la data corrente, e precisamente int annoCorr = Calendar.getInstance().get(Calendar.YEAR); ITS A. Volta – programmazione java – Flavia Lollis 14 6. Raccolta di cartoline Si vuole registrare le cartoline scambiate tra un gruppo di amici. Il programma deve rilevare tre elementi: il nome del mittente il nome del destinatario il nome della località da cui la cartolina è stata inviata Il programma offre le seguenti opportunità: 1. Aggiungi una cartolina 2. Cerca per mittente - stampa l’elenco degli amici che hanno ricevuto cartoline dall’amico specificato e le località da cui sono state spedite le cartoline 3. Cerca per destinatario- stampa l’elenco degli amici che hanno spedito cartoline all’amico specificato e le località corrispondenti 4. Cerca per località - stampa l’elenco degli amici che si sono scambiati cartoline delle località corrispondenti Classe Cartolina: Cartolina(String m, String d, String l) – costruttore che riceve in input mittente, destinatario e luogo daiTesto() - il metodo restituisce una stringa composta da : “cartolina spedita da “ , mittente , “ a “ destinatario , “ da “ , luogo Classe Raccoglitore: main() - richiama il costruttore della classe Raccoglitore() - costruttore senza parametri: chiede quante cartoline si pensa di conservare, crea con questo numero il vettore di oggetti Cartolina e alla fine chiama il metodo menu() ITS A. Volta – programmazione java – Flavia Lollis 15 menu() - propone in un ciclo il menù richiesto, legge la scelta fatta, ed in base alla scelta chiama i relativi metodi. addCart() - chiede quante cartoline si vuole aggiungere, e poi in un ciclo, una alla volta chiede i dati delle cartoline, crea l’oggetto Cartolina utilizzando il costruttore con parametri e la mette nel vettore di cartoline del raccoglitore. cercaMitt() - chiede di digitare il nome del mittente, e poi scorrendo il vettore di cartoline confronta il nome del mittente di ogni cartolina con il nome cercato, e se sono uguali emette a video la stringa restituita dal metodo daiTesto() della cartolina stessa cercaDest() - chiede di digitare il nome del destinatario, e poi scorrendo il vettore di cartoline confronta il nome del destinatario di ogni cartolina con il nome cercato, e se sono uguali emette a video la stringa restituita dal metodo daiTesto() della cartolina stessa. cercaLuogo() - chiede di digitare il nome del luogo da cui è stata inviata la cartolina, e poi scorrendo il vettore di cartoline confronta il nome del luogo di ogni cartolina con il nome cercato, e se sono uguali emette a video la stringa restituita dal metodo daiTesto() della cartolina stessa. 9 Raccolta di cartoline modificata Modificare il programma precedente aggiungendo anche la data di spedizione della cartolina, e aggiungendo un metodo alla Cartolina che stabilisce se è uguale o meno ad una cartolina ricevuta come parametro: due cartoline sono uguali se provengono dallo stesso luogo nella stessa data, anche se mittente e/o destinatario sono diversi. 8. Treni speciali Trenitalia vuole fornire alle agenzie viaggi un servizio di treni straordinari per organizzare dei viaggi giornalieri in alcune città. Un’agenzia può chiedere la costituzione di un treno speciale nella giornata desiderata, con partenza da una determinata città, arrivo nel luogo da visitare e rientro in giornata nel luogo di partenza. Un treno ha dunque una città ed un orario di partenza e di arrivo, ed è composto da vagoni passeggeri. Ogni vagone passeggeri è di prima o di seconda classe, ha un costo giornaliero e un certo numero di posti numerati che dipende dalla classe: i vagoni di prima classe hanno 40 posti che costano 25 euro l’uno per la giornata, quelli di seconda classe ne hanno 56 e costano 18 euro al giorno. Scrivere un programma che permetta a Trenitalia di creare e gestire i treni speciali delle varie agenzie, in particolare che permetta di: 9)creare un nuovo treno rilevando il nome dell’agenzia che lo richiede, il giorno della prenotazione, città e orario di partenza ed arrivo, (anche per il ritorno), il numero di vagoni di prima e seconda classe richiesti. ITS A. Volta – programmazione java – Flavia Lollis 16 10)Aggiungere un vagone ad un treno 11)togliere un vagone ad un treno 12)prenotare dei posti su un treno 13)calcolare l’incasso che porta l’effettuazione del treno ITS A. Volta – programmazione java – Flavia Lollis 17 ITS A. Volta – programmazione java – Flavia Lollis 18