Compare commits

..

6 Commits

Author SHA1 Message Date
La Programmatrice Verde
50bc6235ad Migliorie UX 2025-10-30 17:17:50 +01:00
La Programmatrice Verde
9cad5b1af9 Rimuovi metodo bislungo 2025-10-30 11:44:06 +01:00
La Programmatrice Verde
262f581394 Migliorata data 2025-10-28 13:22:30 +01:00
La Programmatrice Verde
cda2a97d02 Miglioria inserimento ed estrazione veicolo 2025-10-28 13:20:10 +01:00
La Programmatrice Verde
9f495c908f Miglioria UX 2025-10-28 12:33:58 +01:00
La Programmatrice Verde
6d8c8fb7bb Correzione eccezione null nella stampa 2025-10-28 12:30:25 +01:00
2 changed files with 195 additions and 122 deletions

View File

@@ -14,7 +14,7 @@ public class Garage {
public static final int DIMENSIONE_GARAGE = 15; public static final int DIMENSIONE_GARAGE = 15;
VeicoloAMotore[] veicoli = new VeicoloAMotore[DIMENSIONE_GARAGE]; VeicoloAMotore[] veicoli = new VeicoloAMotore[DIMENSIONE_GARAGE];
public int immettiNuovoVeicolo(VeicoloAMotore v) { public int immettiNuovoVeicolo(VeicoloAMotore v) throws ArrayIndexOutOfBoundsException {
int ritorno = trovaPosizioneLibera(); int ritorno = trovaPosizioneLibera();
veicoli[ritorno] = v; veicoli[ritorno] = v;
return ritorno; return ritorno;
@@ -27,8 +27,12 @@ public class Garage {
} }
public void stampaSituazionePosti() { public void stampaSituazionePosti() {
for (VeicoloAMotore veicoloAMotore : veicoli) { for (int i = 0; i < this.veicoli.length; i++) {
System.out.println(veicoloAMotore.toString()); if (this.veicoli[i] != null) {
System.out.println("Posizione " + i + ":\n" + this.veicoli[i].toString());
} else {
System.out.println("La posizione " + i + " è vuota.");
}
} }
} }

View File

@@ -23,6 +23,7 @@ public class MainGarage {
static Scanner sc = new Scanner(System.in); static Scanner sc = new Scanner(System.in);
static Garage garage = new Garage(); static Garage garage = new Garage();
static final String ERRORE_OPZIONE = "Opzione non valida.";
public static void main() { public static void main() {
int scelta = -1; int scelta = -1;
@@ -55,7 +56,7 @@ public class MainGarage {
pausa(); pausa();
break; break;
default: default:
System.out.println("Opzione non valida."); System.out.println(ERRORE_OPZIONE);
pausa(); pausa();
break; break;
} }
@@ -81,16 +82,86 @@ public class MainGarage {
String tipologia; String tipologia;
int numTempiMotore = 0; int numTempiMotore = 0;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); boolean error = false;
Date annoImmatricolazioneDate; int scelta;
boolean error;
Date now = new Date();
String scelta;
VeicoloAMotore veicolo = null; VeicoloAMotore veicolo = null;
int posizioneOccupata;
System.out.print("Inserisci la marca: "); System.out.print("Inserisci la marca: ");
marca = sc.nextLine().trim(); marca = sc.nextLine().trim();
annoImmatricolazione = annoImmatricolazione();
System.out.print("Inserisci il tipo di alimentazione: ");
tipoAlimentazione = sc.nextLine().trim();
cilindrata = cilindrata();
do {
try {
error = false;
System.out.println("Opzioni possibili:");
System.out.println("1. Furgone");
System.out.println("2. Automobile");
System.out.println("3. Motocicletta");
System.out.print("Inserire la tipologia di veicolo tra le opzioni sopra: ");
scelta = sc.nextInt();
sc.nextLine();
switch (scelta) {
case 1:
capacitaCarico = capacitaCarico();
veicolo = new Furgone(annoImmatricolazione, marca, tipoAlimentazione, cilindrata,
capacitaCarico);
break;
case 2:
numPorte = numPorte();
veicolo = new Automobile(annoImmatricolazione, marca, tipoAlimentazione, cilindrata, numPorte);
break;
case 3:
System.out.print("Inserire la tipologia della motocicletta: ");
tipologia = sc.nextLine();
numTempiMotore = numTempiMotore();
veicolo = new Motocicletta(annoImmatricolazione, marca, tipoAlimentazione, cilindrata,
tipologia,
numTempiMotore);
break;
default:
System.out.println(ERRORE_OPZIONE);
pausa();
error = true;
break;
}
} catch (InputMismatchException _) {
System.out.println(ERRORE_OPZIONE);
pausa();
error = true;
}
} while (error);
try {
posizioneOccupata = garage.immettiNuovoVeicolo(veicolo);
System.out.println("Veicolo inserito con successo alla posizione " + posizioneOccupata + ".");
} catch (ArrayIndexOutOfBoundsException _) {
System.out.println("Errore: non ci sono posti disponibili, riprovare.");
}
}
static int annoImmatricolazione() {
boolean error;
Date annoImmatricolazioneDate;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
Date now = new Date();
String annoIniziale = "1900";
Date dataIniziale = null;
try {
dataIniziale = sdf.parse(annoIniziale);
} catch (ParseException _) {
System.out.println("Errore non previsto nell'inizializzazione della data.");
}
int ritorno = 0;
do { do {
error = false; error = false;
try { try {
@@ -101,8 +172,14 @@ public class MainGarage {
System.out.println("Errore: il veicolo non può esser stato immatricolato nel futuro."); System.out.println("Errore: il veicolo non può esser stato immatricolato nel futuro.");
pausa(); pausa();
error = true; error = true;
} else if (annoImmatricolazioneDate.before(dataIniziale)) {
System.out.println(
"Errore: il veicolo non può esser stato immatricolato prima del " + annoIniziale + ".");
pausa();
error = true;
} else {
ritorno = Integer.parseInt(sdf.format(annoImmatricolazioneDate));
} }
annoImmatricolazione = Integer.parseInt(annoImmatricolazioneDate.toString());
} catch (ParseException _) { } catch (ParseException _) {
System.out.println("Errore nella lettura della data."); System.out.println("Errore nella lettura della data.");
pausa(); pausa();
@@ -110,17 +187,20 @@ public class MainGarage {
} }
} while (error); } while (error);
System.out.print("Inserisci il tipo di alimentazione: "); return ritorno;
tipoAlimentazione = sc.nextLine().trim(); }
// TODO: controlli sull'alimentazione (niente veicoli alimentati a scoregge)
static int cilindrata() {
boolean error;
int ritorno = 0;
do { do {
error = false; error = false;
try { try {
System.out.print("Inserire la cilindrata: "); System.out.print("Inserire la cilindrata: ");
cilindrata = sc.nextInt(); ritorno = sc.nextInt();
sc.nextLine();
if (cilindrata <= 0) { if (ritorno <= 0) {
System.out.println("Errore: la cilindrata deve essere un numero positivo."); System.out.println("Errore: la cilindrata deve essere un numero positivo.");
pausa(); pausa();
error = true; error = true;
@@ -132,24 +212,21 @@ public class MainGarage {
} }
} while (error); } while (error);
do { return ritorno;
error = false; }
System.out.println("Opzioni possibili:");
System.out.println("Furgone"); static int capacitaCarico() {
System.out.println("Automobile"); boolean error;
System.out.println("Motocicletta"); int ritorno = 0;
System.out.print("Inserire la tipologia di veicolo: ");
scelta = sc.nextLine().trim().toLowerCase();
switch (scelta) {
case "furgone":
do { do {
error = false; error = false;
try { try {
System.out.print("Inserire la capacità di carico: "); System.out.print("Inserire la capacità di carico: ");
capacitaCarico = sc.nextInt(); ritorno = sc.nextInt();
sc.nextLine();
if (capacitaCarico <= 0) { if (ritorno <= 0) {
System.out.println("Errore: la capacità di carico deve essere un numero positivo."); System.out.println("Errore: la capacità di carico deve essere un numero positivo.");
pausa(); pausa();
error = true; error = true;
@@ -160,16 +237,21 @@ public class MainGarage {
error = true; error = true;
} }
} while (error); } while (error);
veicolo = new Furgone(annoImmatricolazione, marca, tipoAlimentazione, cilindrata, capacitaCarico);
break; return ritorno;
case "automobile": }
static int numPorte() {
boolean error;
int ritorno = 0;
do { do {
error = false; error = false;
try { try {
System.out.print("Inserire il numero di porte: "); System.out.print("Inserire il numero di porte: ");
numPorte = sc.nextInt(); ritorno = sc.nextInt();
sc.nextLine();
if (numPorte <= 2) { if (ritorno < 2) {
System.out.println( System.out.println(
"Errore: il numero di porte deve essere un numero positivo e non può essere inferiore a 2."); "Errore: il numero di porte deve essere un numero positivo e non può essere inferiore a 2.");
pausa(); pausa();
@@ -181,23 +263,26 @@ public class MainGarage {
error = true; error = true;
} }
} while (error); } while (error);
veicolo = new Automobile(annoImmatricolazione, marca, tipoAlimentazione, cilindrata, numPorte);
break; return ritorno;
case "motocicletta": }
System.out.print("Inserire la tipologia della motocicletta: ");
tipologia = sc.nextLine(); static int numTempiMotore() {
boolean error;
int ritorno = 0;
do { do {
error = false; error = false;
try { try {
System.out.println("Opzioni possibli"); System.out.println("Opzioni possibili");
System.out.println("2"); System.out.println("2");
System.out.println("4"); System.out.println("4");
System.out.print("Inserisci il numero di tempi del motore: "); System.out.print("Inserisci il numero di tempi del motore tra le opzioni possibili: ");
numTempiMotore = sc.nextInt(); ritorno = sc.nextInt();
sc.nextLine();
switch (numTempiMotore) { switch (ritorno) {
case 2, 4: case 2, 4:
break; break;
default: default:
@@ -213,19 +298,7 @@ public class MainGarage {
} }
} while (error); } while (error);
veicolo = new Motocicletta(annoImmatricolazione, marca, tipoAlimentazione, cilindrata, tipologia, return ritorno;
numTempiMotore);
break;
default:
System.out.println("Opzione non valida.");
pausa();
error = true;
break;
}
} while (error);
garage.immettiNuovoVeicolo(veicolo);
System.out.println("Veicolo inserito con successo.");
} }
static void estraiVeicolo() { static void estraiVeicolo() {
@@ -235,13 +308,11 @@ public class MainGarage {
do { do {
error = false; error = false;
do {
try { try {
System.out.print("Inserire la posizione: "); System.out.print("Inserire la posizione: ");
posizione = sc.nextInt(); posizione = sc.nextInt();
if (posizione <= 0 || posizione >= Garage.DIMENSIONE_GARAGE) { if (posizione < 0 || posizione >= Garage.DIMENSIONE_GARAGE) {
System.out.println("Errore: la posizione non esiste."); System.out.println("Errore: la posizione non esiste.");
pausa(); pausa();
error = true; error = true;
@@ -255,12 +326,10 @@ public class MainGarage {
veicoloEstratto = garage.estraiVeicolo(posizione); veicoloEstratto = garage.estraiVeicolo(posizione);
if (veicoloEstratto != null) { if (veicoloEstratto != null) {
System.out.println("Veicolo estratto:");
System.out.println(veicoloEstratto.toString()); System.out.println(veicoloEstratto.toString());
} else { } else {
System.out.println("Errore: la posizione indicata è vuota."); System.out.println("Errore: la posizione indicata è vuota.");
pausa(); }
error = true;
}
} while (error);
} }
} }