Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Conta elementi all'interno di un arraylist

    Salve a tutti.
    Ho il seguente problema:
    Per un'esercitazione, devo fare un progetto per la gestione di un autosalone.
    Le specifiche di tale progetto sono le seguenti:
    - Definire una classe Auto avente i seguenti parametri:
    - Marca e modello
    - anno di immatricolazione
    - km percorsi
    - prezzo dell'auto.
    - Definire i vari metodi.
    Di seguito il codice della classe auto:

    public class Auto {
    public String marcaModello;
    public int annoImmatricolazione;
    public int kmPercorsi;
    public double prezzo;

    public Auto(String marcaModello, int annoImmatricolazione, int kmPercorsi, double prezzo){
    this.marcaModello = marcaModello;
    this.annoImmatricolazione = annoImmatricolazione;
    this.kmPercorsi = kmPercorsi;
    this.prezzo = prezzo;
    }

    public void stampa(){
    System.out.println("Marca e Modello: "+marcaModello);
    System.out.println("Anno Immatricolazione: "+annoImmatricolazione);
    System.out.println("km percorsi: "+kmPercorsi);
    System.out.println("prezzo: "+prezzo);
    }

    public void modificaPrezzo(double nuovoPrezzo){
    this.prezzo = nuovoPrezzo;
    }

    public double getPrezzo(){
    return prezzo;
    }

    public int getAnnoImmatricolazione(){
    return annoImmatricolazione;
    }

    public int getKmPercorsi(){
    return kmPercorsi;
    }



    }

    Mi si chiede inoltre di implementare una classe ListinoAuto che gestisce un arraylist di oggetti della classe Auto.
    I metodi da implementare sono:
    - aggiungiAuto per inserire un oggetto Auto nell'arraylist
    -contaAutoNuove per contare il numero di auto che abbiano percorso zero km
    -autoPiùCostosa per stabilire l'auto con il prezzo maggiore.

    Di seguito il codice della classe:




    import java.util.ArrayList;


    public class ListinoAuto {
    public ArrayList<Auto> listino;
    public ListinoAuto(){
    listino = new ArrayList<Auto>();
    }

    public void aggiungi(Auto a){
    listino.add(a);
    }
    public int contaAutoNuove(){
    int contatore = 0;
    for(int i = 0; i < listino.size(); i++){
    if((listino.get(i)).getKmPercorsi() == 0)
    contatore = contatore++;
    }
    return contatore;
    }

    public Auto autoPiuCostosa(){
    Auto autoMax = listino.get(0);
    for(int i = 0; i < listino.size(); i++){
    if(((listino.get(i)).getPrezzo()) > autoMax.getPrezzo() )
    autoMax = listino.get(i);
    }
    return autoMax;

    }


    }

    I metodi aggiungi e autoPiuCostosa funzionano bene. Il problema sta nel metodo contaAutoNuove, il quale mi restituisce sempre il valore 0 anche se ho inserito oggetti Auto con numero di km > 0

    Vi posto anche il codice della classe di test:

    package Fond2;


    import java.util.ArrayList;


    public class ProvaListino {


    public static void main(String[] args) {
    ListinoAuto listino = new ListinoAuto();


    Auto a1 = new Auto("Alfa Romeo Giulia 1.4", 2017, 0, 7000);
    Auto a2 = new Auto("Alfa Romeo Giulietta 1.7 TdCi", 2015,35000, 9500);
    Auto a3 = new Auto("Ford Focus 1.5 Turbo IE", 2008, 118000, 6800);
    Auto a4 = new Auto("Mercedes Classe A", 2017, 150, 11000);
    Auto a5 = new Auto("Audi A4 Tdi", 2016, 0, 16500);

    listino.aggiungi(a1);
    listino.aggiungi(a2);
    listino.aggiungi(a3);
    listino.aggiungi(a4);
    listino.aggiungi(a5);

    System.out.print("L'auto più costosa è: ");
    (listino.autoPiuCostosa()).stampa();
    System.out.println(listino.contaAutoNuove());





    }


    }

    Potete darmi una mano?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Andreawave Visualizza il messaggio
    contatore = contatore++;
    Questo è sbagliato. E' innanzitutto un post-incremento, vuol dire che l'incremento avviene DOPO aver usato il valore. Ma avverrebbe comunque prima della assegnazione. Ma la assegnazione assegna lo stesso valore iniziale. Morale: qui l'effetto complessivo è che NON c'è alcun incremento!!

    Non cercare cose "strane".

    contatore++;

    è sufficiente. Se proprio non volessi usare ++, allora anche

    contatore = contatore + 1;

    è (ovviamente) corretto.


    Quote Originariamente inviata da Andreawave Visualizza il messaggio
    for(int i = 0; i < listino.size(); i++){
    if(((listino.get(i)).getPrezzo()) > autoMax.getPrezzo() )
    Qui potresti partire con i = 1 (nulla di male comunque). E nel if si potrebbero togliere delle parentesi che sono tecnicamente superflue.

    Non ho letto tutto tutto il codice.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Questo è sbagliato. E' innanzitutto un post-incremento, vuol dire che l'incremento avviene DOPO aver usato il valore. Ma avverrebbe comunque prima della assegnazione. Ma la assegnazione assegna lo stesso valore iniziale. Morale: qui l'effetto complessivo è che NON c'è alcun incremento!!

    Non cercare cose "strane".

    contatore++;

    è sufficiente. Se proprio non volessi usare ++, allora anche

    contatore = contatore + 1;

    è (ovviamente) corretto.
    Perfetto! Adesso funziona! Ho inserito contatore = contatore + 1. Il problema lo dava, come dici tu, nell'istruzione contatore = contatore++

    Grazie mille!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.