Selezione di un prodotto se molti corrispondono + fix Tecnica Segreta Array come Liste™

This commit is contained in:
La Programmatrice Verde
2025-10-22 22:41:18 +02:00
parent 1af216f415
commit bcbf6e19c8

View File

@@ -278,6 +278,7 @@ public class listaSpesa {
boolean error, isAlimentare = false, useNomeProdotto = false, exit = false;
String scelta, nomeODescrizione;
float qta = 0;
Prodotto prodottoTrovato;
do {
do {
@@ -319,11 +320,43 @@ public class listaSpesa {
nomeODescrizione = sc.nextLine().trim();
if (ricercaProdotto(nomeODescrizione, isAlimentare)) {
System.out.println("Prodotto trovato: ");
Prodotto prodottoTrovato = isAlimentare ? (Alimentare) ricercaProdotto(nomeODescrizione)
: (NonAlimentare) ricercaProdotto(nomeODescrizione);
prodottoTrovato.stampaDati();
Prodotto prodottiTrovati[] = ricercaProdotto(nomeODescrizione);
if (prodottiTrovati.length == 1) {
prodottoTrovato = prodottiTrovati[0];
System.out.println("Prodotto trovato: ");
prodottoTrovato.stampaDati();
} else {
System.out.println("Sono stati trovati i seguenti prodotti: ");
for (int i = 0; i < prodottiTrovati.length; i++) {
System.out.println("Prodotto n. " + i);
prodottiTrovati[i].stampaDati();
System.out.println();
}
int indice = 0;
System.out.println();
do {
error = false;
try {
System.out.print("Inserire il numero di prodotto desiderato: ");
indice = sc.nextInt();
sc.nextLine();
if (indice < 0 || indice >= prodottiTrovati.length) {
System.out.println("Errore: numero di prodotto non valido.");
pausa();
error = true;
}
} catch (InputMismatchException e) {
System.out.println("Errore: numero non valido.");
pausa();
error = true;
}
} while (error);
prodottoTrovato = prodottiTrovati[indice];
}
do {
error = false;
@@ -357,7 +390,7 @@ public class listaSpesa {
if (qta <= prodottoTrovato.checkQtaDisponibile(
useNomeProdotto ? nomeODescrizione : prodottoTrovato.getNome(), qta)) {
if (trovaProdottoInScontrino(prodottoTrovato) == -1) {
if (prodottoTrovato.getQta() - qta == 0) {
@@ -397,6 +430,10 @@ public class listaSpesa {
} while (error);
} else if (scelta.equals("n")) {
System.out.println("Se il prodotto non è stato trovato, provare a scrivere un"
+ (useNomeProdotto ? " nome" : "a descrizione") + " più precis"
+ (useNomeProdotto ? "o" : "a") + " o a ricercare per "
+ (useNomeProdotto ? "descrizione" : "nome") + ".");
break;
} else {
System.out.println("Errore: opzione non valida.");
@@ -406,6 +443,10 @@ public class listaSpesa {
} while (error);
} else {
System.out.println("Errore: prodotto non trovato.");
System.out.println("Provare a scrivere un"
+ (useNomeProdotto ? " nome" : "a descrizione") + " più precis"
+ (useNomeProdotto ? "o" : "a") + " o a ricercare per "
+ (useNomeProdotto ? "descrizione" : "nome") + ".");
pausa();
}
} while (scelta.equals("n") || !exit);
@@ -441,11 +482,11 @@ public class listaSpesa {
boolean ritorno = false;
for (int i = 0; i < magazzino.length && !ritorno; i++) {
if (isAlimentare) {
if (magazzino[i].getClass().getSimpleName().equals("Alimentare")) {
if (magazzino[i].getClass().getSimpleName().equals("Alimentare") && magazzino[i] != null) {
ritorno = magazzino[i].getNome().contains(nome) || magazzino[i].getDescrizione().contains(nome);
}
} else {
if (magazzino[i].getClass().getSimpleName().equals("NonAlimentare")) {
if (magazzino[i].getClass().getSimpleName().equals("NonAlimentare") && magazzino[i] != null) {
ritorno = magazzino[i].getNome().contains(nome) || magazzino[i].getDescrizione().contains(nome);
}
}
@@ -453,14 +494,15 @@ public class listaSpesa {
return ritorno;
}
static Prodotto ricercaProdotto(String p_nomeODescrizione) {
Prodotto ritorno = null;
boolean exit = false;
for (int i = 0; i < magazzino.length && !exit; i++) {
if (magazzino[i].getNome().contains(p_nomeODescrizione)
|| magazzino[i].getDescrizione().contains(p_nomeODescrizione)) {
ritorno = magazzino[i];
exit = true;
static Prodotto[] ricercaProdotto(String p_nomeODescrizione) {
Prodotto ritorno[] = null;
int dimensione = 0;
for (Prodotto prodotto : magazzino) {
if (prodotto.getNome().contains(p_nomeODescrizione)
|| prodotto.getDescrizione().contains(p_nomeODescrizione)) {
ritorno = ritorno == null ? new Prodotto[1] : Arrays.copyOf(ritorno, dimensione + 1, ritorno.getClass());
ritorno[dimensione] = prodotto;
dimensione++;
}
}
return ritorno;
@@ -535,7 +577,7 @@ public class listaSpesa {
Alimentare alimentari[] = null;
for (Prodotto prodotto : magazzino) {
if (prodotto.getClass().getSimpleName().equals("Alimentare")) {
alimentari = Arrays.copyOf(alimentari, dimensione + 1, alimentari.getClass());
alimentari = alimentari == null ? new Alimentare[1] : Arrays.copyOf(alimentari, dimensione + 1, alimentari.getClass());
alimentari[dimensione] = (Alimentare) prodotto;
dimensione++;
}