Esercizio polimorfismo Java

di il
24 risposte

Esercizio polimorfismo Java

Salve a tutti , tra poco avrò l'esonero di java , e molto probabilmente ci sarà un esercizio sul polimorfismo nel compito.
Mi sono imbattuto in un vecchio esercizio che aveva dato il prof. Il testo è il seguente.
Si definisca una gerarchia di classi per rappresentare le case vendute da una agenzia immobiliare.
Le case sono due tipi: appartamenti e ville. Per ogni casa si rappresenti: la superficie ed il numero
di stanze.
Inoltre per gli appartamenti si rappresenti il codice energetico (un intero), mentre per le ville si
rappresenti il fatto che abbiano o no una piscina.
Entrambe le classi contengono un metodo “costo” che restituisce il costo della casa.
Per gli appartamenti il costo è il prodotto fra la superficie e 1500, più il prodotto fra il numero
delle stanze ed il codice energetico; per le ville il costo è il prodotto fra la superficie e 2000, più
20000 se c’è la piscina, più 10000 se ci sono almeno 10 stanze.
Si definisca una classe Archivio che contiene come campo un array V in cui è possibile inserire sia
appartamenti che ville.
Si definisca infine un metodo della classe Archivio che, dato un parametro n, restituisce la media
dei costi di tutte le case presenti in V la cui superficie supera n.

Dopo essermi definito la Sovraclasse Casa e le sottoclassi Villa e Appartamento , ho fatto la classe Archivio.

Soltanto che non riesco a fare proprio l'ultimo metodo. O per lo meno , nella mia testa so come impostarlo ma non riesco a scriverlo sintatticamente.


Io ho pensato cosi. Mi dichiaro una funzione double mediaCosti con paramentro n ( dato che lo da l'esercizio).
Scorro tramite un ciclo l'array e poi faccio un if dichiarando se la superficie è maggiore del paramentro che gli abbiamo passato. Se è maggiore incremento un contatore di 1 che poi mi andrà a servire per calcolare la media.
Dopo if volevo mettere il return scrivendo che il return è uguale a il valore delle case che abbiamo preso in considerazione diviso il contatore.


Ma sintatticamente sono riuscito a buttare giu solo questo scorcio di codice per il metodo.

Chi mi aiutaaaa
 public double mediaCosti(int n){
        Casa oggetto= new Casa();
        int contatore=0;
        
        for (int j=0 ; j<v.length; j++){
        
            if(v[i].superficie>n)
                contatore++;
        }
       return (()/contatore);   
    }

24 Risposte

  • Re: Esercizio polimorfismo Java

    Si definisca una classe Archivio che contiene come campo un array V in cui è possibile inserire sia
    appartamenti che ville.
    Si definisca infine un metodo della classe Archivio che, dato un parametro n, restituisce la media
    dei costi di tutte le case presenti in V la cui superficie supera n.
     public double mediaCosti(int n){
            Casa oggetto= new Casa();
            int contatore=0;
            
            for (int j=0 ; j<v.length; j++){
            
                if(v[i].superficie>n)
                    contatore++;
            }
           return (()/contatore);   
        }
    E cosa c'entra un new Casa() ??

    Allora: hai N case, ciascuna ha una superficie e un costo. Il metodo riceve una superficie minima. Quindi, per ciascuna casa nell'array:
    Se la sua superficie è superiore a quella richiesta, allora:
    -- Aggiungi il costo ad una variabile di "sommatoria dei costi"
    -- Incrementi un contatore.

    Alla fine il costo medio è chiaramente la sommatoria diviso il contatore.
  • Re: Esercizio polimorfismo Java

    Ciao,
    oltre a mettere un contatore dovresti salvare il costo della casa
    
    costo_totale=0;
     for (int j=0 ; j<v.length; j++){
            
                if(v[i].superficie>n){
                    costo_totale+=v[i].getCosto();
                    contatore++;
                }
            }
           return (costo_totale/contatore);   
    
    Ti ricordo che per prendere o aggiornare i parametri è sempre meglio creare dei get e dei set per queste operazioni.
    quindi ti consiglio di creare il metodo getSuperfice()
    v.getSuperfice();
    stai attento/a che i professori su questo punto, che sembrerà banale, ci puntano molto.

    Ciao.
  • Re: Esercizio polimorfismo Java

    Vi ringrazio per le risposte.

    Ma sintatticamente come diavolo si scrive? come faccio a prendere il costo delle case che è un metodo astratto definito nella sovraclasse?

    Sicuramente faccio il caso se la superficie è maggiore del paramentro allora incremento il contatore e sommo ad una variabile media di tipo double , il costo della casa, ma come?

    if (v.superficie>n)
    contatore++;
    media+=costo();

    cosi penso sia sbagliato sintatticamente
  • Re: Esercizio polimorfismo Java

    paloppa ha scritto:


    come faccio a prendere il costo delle case che è un metodo astratto definito nella sovraclasse?
    Ma sarà sicuramente implementato nelle sotto-classi "concrete" di cui potrai istanziare oggetti!
  • Re: Esercizio polimorfismo Java

    andbin ha scritto:


    paloppa ha scritto:


    come faccio a prendere il costo delle case che è un metodo astratto definito nella sovraclasse?
    Ma sarà sicuramente implementato nelle sotto-classi "concrete" di cui potrai istanziare oggetti!
    Si in ogni sottoclasse ho implementato il metodo ovviamente.

    Attualmente il mio codice nella classe archivio è questo
    package esercitazione24aprile2014;
    
    
    public class Archivio {
        Casa v[];
        
        
        public Archivio(int n, int m){
        v=new Casa[n+m];
        
        
        for (int i=0; i<n ; i++)
            v[i]= new Appartamento((int)(Math.random()*10) , (int)(Math.random()*200) , (int)(Math.random()*20));
        
        
        
        for (int i=n ; i<v.length; i++)
            v[i]= new Ville((int)(Math.random()*10) , (int)(Math.random()*200) ,true );
        
    }
        
        public double mediaCosti(int n){
            
            int contatore=0;
            
            for (int j=0 ; j<v.length; j++){
            
                if(v[i].superficie>n)
                    contatore++;
            }
           return    
        }
        
        public void stampa(){
            for (int i=0 ; i<v.length; i++)
                System.out.println(v[i].superficie);
        }
    }
    Ho un errore sulla dell'if e non capisco neanche il perchè . . . .
  • Re: Esercizio polimorfismo Java

    Certo...stai ciclando j
    
    for (int j=0 ; j<v.length; j++){
    v[i]..
    
    Ciao.
  • Re: Esercizio polimorfismo Java

    schumy2000 ha scritto:


    certo...stai ciclando j
    
    for (int j=0 ; j<v.length; j++){
    v[i]..
    
    Ciao.
    E scusa cosa dovrei ciclare? L'array?

    cosi mi da errore for (Casa v ; v<v.length; v++)
  • Re: Esercizio polimorfismo Java

    Stai usando j come indice nel for mentre dentro v stai usando l'indice.
    Devi usare o tutti i o tutti j
  • Re: Esercizio polimorfismo Java

    Ecco così.
    
    for (int i=0 ; i<v.length; i++){
    v[i]
    
  • Re: Esercizio polimorfismo Java

    Mi sa che sono arrivato alla soluzione. Ultimo dubbio. Ho fatto la funzione costo astratta nella sovraclasse e ho instanziato nelle sottoclassi. Come faccio a stampare i vari valori casuali che sono stati dati alle classi?

    Per la superficie è semplice perchè stampo v.superficie , ma per il metodo?!? v.costo() non va
  • Re: Esercizio polimorfismo Java

    paloppa ha scritto:


    Come faccio a stampare i vari valori casuali che sono stati dati alle classi?

    Per la superficie è semplice perchè stampo v.superficie , ma per il metodo?!? v.costo() non va

    Mi spiace, ma continua a non essere chiaro. Come sono fatte le classi Casa/Appartamento/Ville (Villa semmai) ?
    Perché superficie è un campo e ci accedi direttamente?
  • Re: Esercizio polimorfismo Java

    andbin ha scritto:


    paloppa ha scritto:


    Come faccio a stampare i vari valori casuali che sono stati dati alle classi?

    Per la superficie è semplice perchè stampo v.superficie , ma per il metodo?!? v.costo() non va

    Mi spiace, ma continua a non essere chiaro. Come sono fatte le classi Casa/Appartamento/Ville (Villa semmai) ?
    Perché superficie è un campo e ci accedi direttamente?



    Ce l'ho fattaaaa!!

    Qui la funzione stampa e la funzione mediacosti per chi fosse interessato

    public double mediaCosti(int n){
            
            int contatore=0;
            double media=0;
            
            for (int i= 0 ; i<v.length; i++){
            
                if(v[i].superficie>n)
                    contatore++;
                media+=v[i].costo();
            }
           return media/contatore;    
        }
        
        public void stampa(){
            for (int i=0 ; i<v.length; i++){
                System.out.print("Superfici ");
                System.out.println(v[i].superficie + " ");
                System.out.print("Costi case ");
                System.out.println(v[i].costo() + " ");
        }
        
        
    }
  • Re: Esercizio polimorfismo Java

    Ti ripeto che v.superficie così come è espresso è un errore grave in sede di esame.
    fai un metodo che ti ritorna la superfice.

    Ciao.
  • Re: Esercizio polimorfismo Java

    paloppa ha scritto:


    public double mediaCosti(int n){
            
            int contatore=0;
            double media=0;
            
            for (int i= 0 ; i<v.length; i++){
            
                if(v[i].superficie>n)
                    contatore++;
                media+=v[i].costo();
            }
           return media/contatore;    
        }
    Guarda che così stai sommando i costi di TUTTE le case e poi lo dividi per il numero di case che sono SOLO quelle con una certa superficie in sù.
    Non ha granchè senso ....
Devi accedere o registrarti per scrivere nel forum
24 risposte