Pages: [1] 2   Go Down
Print
Author Topic: Esercizio prodotti agricoli CORRETTO  (Read 4434 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« on: 31-01-2009, 17:17:14 »

Ciao a tutti, ho notato che nel messaggio citato tempo fa da me qui sul forum, riguardante l'esercizio (terza parte) dei prodotti agricoli, ci sono degli errori per cui metto qui l'esercizio corretto (testato e funzionante).
Il diagramma UML è reperibile qui, mentre il codice java lo riporto qui sotto: E' importante precisare che nel diagramma, i costruttori delle classi Data e Provenienza non hanno parametri perchè non mi bastava lo spazio, ma vanno scritti come fatto in tutte le altre classi. Classi e metodi in corsivo (per chi non lo sapesse) sono abstract.
Ecco i codici (due file in uno le classi ed i metodi visibili nel diagramma UML e nell'altro il main con annessi e connessi):

Prodotti.java
Code:
abstract class Prodotti
{
private int peso;
private static int totale=1;
protected final int C=1;
public Prodotti(int peso)
{
this.peso=peso;
totale++;
}
public int getPeso()
{
return peso;
}
public static int getTotale()
{
return totale;
}
abstract double getPrezzo();
abstract public String toString();
}
class Data
{
private int gg;
private int mm;
private int aaaa;
public Data(int gg, int mm, int aaaa)
{
this.gg=gg;
this.mm=mm;
this.aaaa=aaaa;
}
public String toString()
{
return gg+"/"+mm+"/"+aaaa;
}
}
class Provenienza
{
private String localita;
private long vigna;
private Data raccolta;
public Provenienza(String localita, long vigna, Data raccolta)
{
this.localita=localita;
this.vigna=vigna;
this.raccolta=raccolta;
}
public String toString()
{
return "localita: "+localita+" codice vigna: "+vigna+" Data di raccolta: "+raccolta;
}
}
class Etichetta
{
private long barcode;
private Data imbott;
private Data scadenza;
public Etichetta(long barcode, Data imbott, Data scadenza)
{
this.barcode=barcode;
this.imbott=imbott;
this.scadenza=scadenza;
}
public String toString()
{
return "codice a barre: "+barcode+" data di imbottigliamento :"+imbott+" data di scadenza: "+scadenza;
}
}
class Oli extends Prodotti
{
private int viscosita;
public Oli(int peso, int viscosita)
{
super(peso);
this.viscosita=viscosita;
}
public double getPrezzo()
{
return C*this.getPeso();
}
public int getViscosita()
{
return viscosita;
}
public String toString()
{
return "Olio con peso: "+this.getPeso()+" viscosita: "+this.getViscosita()+" e prezzo: "+this.getPrezzo();
}
}
abstract class Vini extends Prodotti
{
private int conservante;
private Provenienza info;
public Vini(int peso, int conservante, Provenienza info)
{
super(peso);
this.conservante=conservante;
this.info=info;
}
public int getConservante()
{
return conservante;
}
public Provenienza getProvenienza()
{
return info;
}
abstract double getPrezzo();
abstract public String toString();
}
class Rossi extends Vini
{
public Rossi(int peso, int conservante, Provenienza info)
{
super(peso,conservante,info);
}
public double getPrezzo()
{
return Math.pow(C+this.getPeso(),5)*this.getConservante()/0.3;
}
        public void Colora(){}
public String toString()
{
return "Vino rosso con peso: "+this.getPeso()+" percentuale di conservante: "+this.getConservante()+" "+this.getProvenienza();
}
}
class Bianchi extends Vini
{
private Etichetta eti;
private int m=1;
public Bianchi(int peso, int conservante, Provenienza info, Etichetta eti)
{
super(peso,conservante,info);
this.eti=eti;
}
public double getPrezzo()
{
return 52*C*3*m;
}
public Etichetta getEtichetta()
{
return eti;
}
public String toString()
{
return "Vino bianco con peso: "+this.getPeso()+" percentuale di conservante: "+this.getConservante()+" "+this.getProvenienza()+" "+this.getEtichetta();
}
}
class Spumanti extends Bianchi
{
private int gas;
public Spumanti(int peso, int conservante, Provenienza info, Etichetta eti, int gas)
{
super(peso,conservante,info,eti);
this.gas=gas;
}
public String toString()
{
return "Spumante con peso: "+this.getPeso()+" percentuale di conservante: "+this.getConservante()+" "+this.getProvenienza()+" "+this.getEtichetta()+" percentuale di gas: "+gas+"%";
}
}

ProvaProdotti.java
Code:
public class ProvaProdotti
{
public static void main(String[] args)
{
int i=0,vini=0,max=-1,j=0;
Provenienza info;
Data raccolta,imbott,scadenza;
Etichetta eti;
Prodotti[] array=new Prodotti[30];
for(i=0;i<array.length;i++)
{
int tipo=(int)(Math.random()*4);
int peso=(int)(1+Math.random()*50);
int percentuale=(int)(1+Math.random()*100);
switch(tipo)
{
case 0:
raccolta=new Data(12,11,1991);
info=new Provenienza("italia",i,raccolta);
array[i]=new Rossi(peso,percentuale,info);
vini++;
break;
case 1:
raccolta=new Data(13,10,1991);
info=new Provenienza("italia",i,raccolta);
imbott=new Data(12,05,1992);
scadenza=new Data(12,5,2004);
eti=new Etichetta(123456789,imbott,scadenza);
array[i]=new Bianchi(peso,percentuale,info,eti);
vini++;
break;
case 2:
raccolta=new Data(15,8,1995);
info=new Provenienza("italia",i,raccolta);
imbott=new Data(1,3,1990);
scadenza=new Data(13,6,2008);
eti=new Etichetta(987654321,imbott,scadenza);
int gas=(int)(1+Math.random()*100);
array[i]=new Spumanti(peso,percentuale,info,eti,gas);
vini++;
break;
case 3:
array[i]=new Oli(peso,percentuale);
break;
}
System.out.println(array[i]); //Stampa informazioni prodotto.
}
System.out.println();
for(i=0;i<array.length;i++) //ricerca vino bianco più pesante...*
{
if(array[i] instanceof Bianchi)
{
if(max==-1) //piazzo l'indice del primo vino bianco che trovo su max così ho il termine di paragone (ed un vino qualora sia l'unico e non potessi fare il paragone)
max=i;
for(j=i+1;j<array.length;j++)
if(array[j] instanceof Bianchi) // se anche il secondo elemento dell'array è un vino bianco possa confrontarne la pesantezza col primo-
if(array[max].getPeso()<array[j].getPeso())
max=j;
}
}
if(max==-1) //se max==-1 significa che non non è stato trovato nemmeno un vino bianco nell'array.
System.out.println("Non sono presenti vini bianchi in lista");
else
System.out.println("Il vino bianco più pesante è: "+array[max]); //*...e stampa.
System.out.println();
/*System.out.println("Numero totale di elementi: "+Prodotti.getTotale());
System.out.println();*/
Prodotti[] ordinati=new Prodotti[vini];
j=0;
for(i=0;i<array.length;i++) //Trasloco vini nel nuovo array...
{
if(array[i] instanceof Vini)
{
ordinati[j]=array[i];
j++;
}
}
for(i=0;i<ordinati.length-1;i++) //...ordinamento nuovo array per prezzo (tramite bubblesort)...
{
for(j=i+1;j<ordinati.length;j++)
{
if(ordinati[i].getPrezzo()>ordinati[j].getPrezzo())
{
Prodotti temp=ordinati[i];
ordinati[i]=ordinati[j];
ordinati[j]=temp;
}
}
}
for(i=0;i<ordinati.length;i++)
System.out.println(ordinati[i]+" *PREZZO*:"+ordinati[i].getPrezzo()); //...e stampa.
}
}
Spero sia utile, soprattutto in vista della terza prova.
Saluti.
« Last Edit: 01-02-2009, 19:56:56 by Fr3d3R!K » Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
TheSpecialOne
Apprendista Forumista
**
Offline Offline

Posts: 232



« Reply #1 on: 31-01-2009, 17:41:40 »

è simile al mio, speriamo capiti un esercizio del genere, non ci si perde molto tempo, e fà confondere poco!
Logged
Blonic
Forumista
***
Offline Offline

Gender: Male
Posts: 868



WWW
« Reply #2 on: 01-02-2009, 19:44:32 »

Hai dimenticato la parte che dice "i vini rossi possono essere colorati chimicamente"
Logged
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #3 on: 01-02-2009, 19:57:44 »

grazie per la segnalazione, siccome l'ho fatto al volo ho dimenticato di scriverlo qui (nell'uml infatti c'è).
Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
MisteroLupo
Apprendista Forumista
**
Offline Offline

Posts: 273

Tra il dire e il fare c'è distanza di hamming 2.


« Reply #4 on: 02-02-2009, 18:52:17 »

Ho visto che nel main i valori delle sottoclassi e le date non li generi casualmente e così si risparmia un po' di tempo. Nel compito si può quindi fare così?
Logged
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #5 on: 02-02-2009, 19:54:45 »

Certo, il random è un modo come un altro per dare valori alle variabili (non importa il valore delle variabili ma che l'esercizio sia giusto).
Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Blonic
Forumista
***
Offline Offline

Gender: Male
Posts: 868



WWW
« Reply #6 on: 02-02-2009, 21:27:48 »

Visto che state affrontando l'argomento: quando nei compiti dice "creare ed inizializzare casulamente un array di oggetti" si riferisce ovviamente anche ai parametri degli oggetti, ma che ci dovremmo mettere?!? Non mi dire che ci dovremmo passare il tempo a fare dei Math.random per ogni singolo parametro!!!!
Logged
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #7 on: 02-02-2009, 21:46:32 »

E invece sì, è richiesto espressamente dal compito passarsi il tempo a fare Math.random() per ogni singolo (anche il più insignificante) parametro!!!!! evil
Ovviamente scherzo, ma questo per dirti che i random sono degli esempi (e nient'altro), non è ciò che metti nei parametri che è importante, l'importante che il programma sia giusto!!! Non perdiamoci in un bicchiere d'acqua!!!
Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Blonic
Forumista
***
Offline Offline

Gender: Male
Posts: 868



WWW
« Reply #8 on: 02-02-2009, 23:07:57 »

Allora ascolta la mia idea furbetta che mi era venuta per risparmiare parecchio lavoro domani:
Avevo intenzione di mettere un commento all'inizio della porzione di codice (esercizio B) in cui diceva che si supponeva l'esistenza di un metodo genValori() che modificava casualmente i valori di delle variabili d'istanza della classe in cui si trova l'esercizio (di cui di anch'esse si suppone l'esistenza), che corrispondono a quelli da usare come parametri attuali, così prima di creare l'oggerro invoco questo metodo e me la sono sbrigata molto elegantemente.
Che ne pensi?
« Last Edit: 02-02-2009, 23:36:32 by Stai Zitto » Logged
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #9 on: 03-02-2009, 08:16:22 »

non ti complicare la vita, assegna dei valori arbitrari e basta!!! O casomai fai quel che si dovrebbe fare sempre in queste situazioni: chiedi al professore cosa gli andrebbe meglio! ok
Saluti.
Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Blonic
Forumista
***
Offline Offline

Gender: Male
Posts: 868



WWW
« Reply #10 on: 03-02-2009, 12:32:34 »

Secondo me la mia non è male come idea, anzi dimistreresti di avere fantasia, requisito importante per la programmazione, in ogni caso meglio chiedere al prof, giusto. Ciao!
Logged
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #11 on: 03-02-2009, 14:06:23 »

tutte le idee sono belle, però il mio consiglio presuppone che hai 1 ora e mezza per svolgere il compito, e non è bello concentrarsi sui dettagli e poi mangiarsi le mani perchè non si è riusciti a completare l'esercizio
Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
MisteroLupo
Apprendista Forumista
**
Offline Offline

Posts: 273

Tra il dire e il fare c'è distanza di hamming 2.


« Reply #12 on: 03-02-2009, 14:38:50 »

tutte le idee sono belle, però il mio consiglio presuppone che hai 1 ora e mezza per svolgere il compito, e non è bello concentrarsi sui dettagli e poi mangiarsi le mani perchè non si è riusciti a completare l'esercizio
quotone sacrosanto!
Logged
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #13 on: 03-02-2009, 20:27:19 »

ho fatto oggi la prova e con mio ( e penso di tutti) grande sollievo il prof ci ha detto di creare con la math.random() solo il valore casuale per lo switch e poi per i parametri ci ha detto semplicemente di mettere i puntini  altrimenti ci sarebbe voluto troppo tempo ci saremmo persi dietro i 1000 parametri!! [Emoticon] Asd
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
Blonic
Forumista
***
Offline Offline

Gender: Male
Posts: 868



WWW
« Reply #14 on: 03-02-2009, 20:37:17 »

Sì, infatti! E' stato davvero confortante!!! ok 
Logged
Pages: [1] 2   Go Up
Print
Jump to: