From bcbf6e19c8a13c6904e857706be71ca51dd1be5b Mon Sep 17 00:00:00 2001 From: La Programmatrice Verde Date: Wed, 22 Oct 2025 22:41:18 +0200 Subject: [PATCH] =?UTF-8?q?Selezione=20di=20un=20prodotto=20se=20molti=20c?= =?UTF-8?q?orrispondono=20+=20fix=20=20Tecnica=20Segreta=20Array=20come=20?= =?UTF-8?q?Liste=E2=84=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/listaspesa/listaSpesa.java | 74 ++++++++++++++++++++++++++-------- 1 file changed, 58 insertions(+), 16 deletions(-) diff --git a/src/listaspesa/listaSpesa.java b/src/listaspesa/listaSpesa.java index 1968fd7..ae521df 100644 --- a/src/listaspesa/listaSpesa.java +++ b/src/listaspesa/listaSpesa.java @@ -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++; }