Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4

    Esercizio Java ArrayList

    Salve a tutti ragazzi e complimenti per il forum!! ....Praticamente ho un problema con il seguente esercizio :

    Definire una classe Prodotto che includa soltanto:
    le variabili istanza marca, nome_prod, prezzo_unitario, quantità
    la definizione del costruttore che inizializza le variabili istanza
    un metodo toString che restituisce una stringa contenente il nome del prodotto la marca e la quantità, separati da uno spazio;
    un metodo getMarca che restituisce una stringa contenente la marca dell’oggetto su cui è invocato;
    un metodo getNome che restituisce il nome;
    un metodo getPrezzo che restituisce il prezzo del prodotto;
    un metodo aumentaPrezzo, che aumenta il prezzo del 2%
    Un metodo incrementaQuantità, che incrementa di 1 le unità di un prodotto.
    Costruire una classe Spesa popolata di oggetti della classe prodotto. Il metodo che aggiunge un prodotto verifica se il prodotto è già presente e in tal caso ne incrementa solo la quantità. Ha un metodo per stampare i prodotti contenuti nella spesa.
    Scrivere un programma che chiede all’utente di inserire i dati dei prodotti della spesa effettuata e calcola il costo complessivo della spesa. Aumenta il prezzo di tutti i prodotti di marca “Cirio”. Calcola nuovamente il totale. Stampa i prodotti acquistati.

    Allora la classe Prodotto l'ho realizzata e non ci sono problemi a riguardo. Le difficoltà sono sulla seconda parte (quella in rosso). Ecco il codice realizzato da me finora :

    codice:
    public class Prodotto {
    
    private String marca;
    private String nome_prod;
    private double prezzo_unitario;
    private int quantità;
    
    public Prodotto(String marca,String nome_prod,int prezzo_unitario,int quantità)
    {
    this.marca = marca;
    this.nome_prod = nome_prod;
    this.prezzo_unitario = prezzo_unitario;
    this.quantità = quantità;
    }
    
    public String toString()
    {
    return nome_prod+" "+marca+" "+quantità;
    }
    
    public String getMarca()
    {
    return marca;
    }
    
    public String getNome()
    {
    return nome_prod;
    }
    
    public double getPrezzo()
    {
    return prezzo_unitario;
    }
    
    public int getQuantità()
    {
    return quantità;
    }
    
    public void aumentaPrezzo()
    {
    prezzo_unitario = (prezzo_unitario)*0.02;
    }
    
    public void incrementaQuantità()
    {
    quantità = quantità + 1;
    }
    }
    
    public class Spesa {
    
    private ArrayList <Prodotto> lista;
    
    public Spesa()
    {
    lista = new ArrayList<Prodotto>();
    }
    
    
    public void aggiungiProdotto(Prodotto p)
    {
    
    int i;
    
    for(i=0;i<lista.size();i++)
    {
    
    
    }
    }
    
    public void stampaLista()
    {
    int i;
    
    for(i=0;i<lista.size();i++)
    {
    System.out.println(lista.get(i).getNome()+" "+lista.get(i).getMarca());
    }
    System.out.println(lista.size());
    }
    
    }
    Il mio problema riguarda la realizzazione del metodo aggiungiProdotto...ho provato una serie svariata di modi, ma non sono riuscito. Qualcuno è così gentile da darmi una mano?? Vi ringrazio in anticipo

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Ho inserito il tag [CODE] per formattare il codice.
    Fanne uso in futuro, pena chiusura della discussione.

    Vedi il Regolamento per questa e altre precisazioni.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Ciao DjPg87,
    La soluzione è alquanto banale, nella Classe prodotto aggiungi il metodo equals, in modo da poter confrontare due oggetti "prodotto" :
    codice:
    public boolean equals(Object obj) {
    		if (this == obj)
    			return true;
    		if (obj == null)
    			return false;
    		if (getClass() != obj.getClass())
    			return false;
    		Prodotto other = (Prodotto) obj;
    		if (marca == null) {
    			if (other.marca != null)
    				return false;
    		} else if (!marca.equals(other.marca))
    			return false;
    		if (nome_prod == null) {
    			if (other.nome_prod != null)
    				return false;
    		} else if (!nome_prod.equals(other.nome_prod))
    			return false;
    		if (Double.doubleToLongBits(prezzo_unitario) != Double
    				.doubleToLongBits(other.prezzo_unitario))
    			return false;
    		if (quantità != other.quantità)
    			return false;
    		return true;
    	}
    il metodo aggiungi prodotto a questo punto può essere implementato come segue :
    codice:
    public void aggiungiProdotto(Prodotto p) {
    		//Ritorna l'indice dell'oggetto contenuto, -1 se non presente
    		int indexOf = lista.indexOf(p);
    		if (indexOf != 1) {
    			lista.get(indexOf).incrementaQuantità();
    		} else {
    			lista.add(p);
    		}
    	}

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4
    Avevo dimenticato di inserire di fare il tag del codice....sorry ......per quanto riguarda la soluzione....la ringrazio molto per la celerità francesco, ma ho ancora dei problemi relativi al lancio di un eccezione dopo la compilazione. Una domanda come mai nel metodo aggiungiProdotto non figura il for, cioè come fa a scorrere l'ArrayList per verificare se è presente o meno un prodotto?

  5. #5
    Se leggi il codice forse te ne accorgi, ho messo anche un commento
    codice:
    //Ritorna l'indice dell'oggetto contenuto, -1 se non presente
    int indexOf = lista.indexOf(p);
    Perchè reinventare l'acqua calda, o meglio perchè rischiare di scrivere codice se qualcuno ha già provveduto a scriverlo per te e lo ha anche testato !!!
    Cmq, consiglio spassionato da un occhio a questo Link.
    Per l'eccezione se la posti forse possiamo darti una mano, altrimenti pace....

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4
    Non volevo dire questo, la mia intenzione è quella di capire il codice da te scritto e non vedendo il ciclo for ho chiesto delucidazioni a tal proposito.
    Il messaggio riguardante l'eccezione è il seguente :

    codice:
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 	at java.util.ArrayList.elementData(Unknown Source) 	at java.util.ArrayList.get(Unknown Source) 	at esercizi.Spesa.aggiungiProdotto(Spesa.java:19) 	at esercizi.SpesaTest.main(SpesaTest.java:18)
    Grazie di tutto cmq!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.