Si aiuti il commissario Montalbano a incastrare Peppe Loforte. Si realizzi un programma
Java che presa in input la sequenza dei prezzi di vendita del gamberone rosso individui il
giorno in cui conviene comprare ed il giorno in cui conviene vendere per poter massimizzare
il guadagno complessivo.
Input
Il file di input contiene la sequenza dei prezzi di vendita del gamberone, uno per riga,
preceduti dal giorno in cui tale prezzo viene applicato. Il giorno č espresso da un numero
intero di 4 cifre. Il prezzo č espresso in euro, con due cifre intere e due cifre decimali.
Output
Il file di output contiene due righe. La prima riga contiene il giorno in cui comprare ed il
prezzo di acquisto. La seconda riga contiene il giorno in cui vendere ed il prezzo di vendita.
input:
0001 23.45
0002 72.34
0003 03.00
0004 45.34
0005 20.20
0006 56.67
0007 34.45
output:
0003 03.00
0006 56.67
Ho scritto il programma cosģ:
codice:
import java.io.*;
public class Esercizio5
{
public static void main(String [] args) throws IOException
{
FileReader reader=null;
BufferedReader buff=null;
PrintWriter out=null;
try{
reader=new FileReader("input.txt");
buff=new BufferedReader(reader);
out=new PrintWriter("OUTPUT.txt");
int righe=(Integer.parseInt(buff.readLine()));
PrezzoVendita [] Elenco=new PrezzoVendita[righe]; //array di oggetti
for(int i=0; i<righe; i++)
{
String s=buff.readLine();
PrezzoVendita a=new PrezzoVendita(s.substring(0,4),s.substring(5,10));
Elenco[i]=a;
}
PrezzoVendita nullo=new PrezzoVendita("","");
int indexmassimo=nullo.getMax(Elenco); //memorizzo l'indice che contiene il massimo
int indexminimo=nullo.getMin(Elenco); //memorizzo l'indice che contiene il minimo
out.print(Elenco[indexminimo].toString()); //stampo l'oggetto
out.print('\r');
out.print('\n');
out.print(Elenco[indexmassimo].toString());
}
catch(IOException e)
{
e.printStackTrace();
}
finally{
if(reader!=null) reader.close();
if(out!=null) out.close();
}
}
}
class PrezzoVendita
{
private String giorno="";
private String prezzo="";
public PrezzoVendita(String giorno, String prezzo)
{
this.giorno=giorno;
this.prezzo=prezzo;
}
public String getGiorno(){ return giorno;}
public String getPrezzo(){return prezzo;}
public int getMin(PrezzoVendita [] a) //memorizzo l'indice in cui si trova il minimo nell'array
{
String min="";
int index=0;
for(int i=0; i<a.length-1; i++)
{
if(i==0)
min=a[i].getPrezzo();
for(int j=i+1; j<a.length; j++)
{
if(min.compareTo(a[j].getPrezzo())>0)
{
min=a[j].getPrezzo();
index=j;
}
}
}
return index;
}
public static int getMax(PrezzoVendita [] b) //...come per il minimo
{
String max="";
int index=0;
for(int i=0; i<b.length-1; i++)
{
if(i==0)
max=b[i].getPrezzo();
for(int j=i+1; j<b.length; j++)
{
if(max.compareTo(b[j].getPrezzo())<0)
{
max=b[j].getPrezzo();
index=j;
}
}
}
return index;
}
public String toString()
{
return getGiorno()+" "+getPrezzo();
}
}
Il programma funziona, mi chiedevo se secondo voi per l'operazione:
codice:
PrezzoVendita nullo=new PrezzoVendita("","");
int indexmassimo=nullo.getMax(Elenco); //memorizzo l'indice che contiene il massimo
int indexminimo=nullo.getMin(Elenco); //memorizzo l'indice che contiene il minimo
Praticamente quando dovevo invocare il metodo sono entrato nel panico perchč ho detto si il minimo lo cerco nell'array di oggetti ma chi lo invoca?
Cosģ ho creato un oggetto PrezzoVendita che come si vede bene č "d'appoggio".
E' corretta come cosa secondo voi o potrebbe essere valutata come una soluzione "sporca" al problema?