codice:
import prog.io.*;
import prog.*;
import prog.utili.Sequenza;
import prog.progettinoI.*;
import java.util.StringTokenizer;
import java.lang.String;
class ProgettinoI
{
public static void main (String args[])
{
ConsoleInputManager in = new ConsoleInputManager();
ConsoleOutputManager out = new ConsoleOutputManager();
//creo canale di lettura col file figure.txt
String nomeFile=in.readLine("Inserisci il nome del file: ");
FileInputManager ingresso = new FileInputManager(nomeFile);
//creo sequenza che conterrà gli oggetti di tipo Figura3D
Sequenza<Figura3D> oggetti = new Sequenza<Figura3D>();
//canale implementato, ora posso leggere da file e costruire gli oggetti di conseguenza
String riga;
int scelta=0;
String oggettoLetto, tokenLetto;
while((riga=ingresso.readLine()) != null)
{
oggettoLetto=riga; //stringa oggettoLetto contiene prima riga del file Figura3D
StringTokenizer stk = new StringTokenizer(oggettoLetto); //uso token per leggere contenuto della riga
tokenLetto=stk.nextToken(); //ora in tokenLetto ho la prima parola apparsa sulla riga di Figura3d prima che incontri il delimitatore
if(tokenLetto=="Sfera")
scelta=1;
else if(tokenLetto=="Parallelepipedo")
scelta=2;
else if(tokenLetto=="Cubo")
scelta=3;
else if(tokenLetto=="Cilindro")
scelta=4;
if(scelta==1) { tokenLetto=stk.nextToken();
double r = Double.parseDouble(tokenLetto);
Sfera n = new Sfera(r); //creo oggetto sfera con raggio uguale al numero letto col nextToken();
oggetti.add(n); //aggiungo l'oggetto Sfera alla sequenza di nome oggetti e di tipo Figura3D
}
else if(scelta== 2){
double a,b,h; //3 double che rapp. lato a lato b e altezza h
tokenLetto=stk.nextToken();
a=Double.parseDouble(tokenLetto);
tokenLetto=stk.nextToken();
b=Double.parseDouble(tokenLetto);
tokenLetto=stk.nextToken();
h=Double.parseDouble(tokenLetto);
Parallelepipedo p = new Parallelepipedo(a,b,h);
oggetti.add(p); }
else if (scelta==3){
double l;
tokenLetto=stk.nextToken();
l=Double.parseDouble(tokenLetto);
Cubo c = new Cubo(l);
oggetti.add(c);
}
else if(scelta==4){
double u,m; //ru= raggio m = altezza
tokenLetto=stk.nextToken();
u=Double.parseDouble(tokenLetto);
tokenLetto=stk.nextToken();
m=Double.parseDouble(tokenLetto);
Cilindro i = new Cilindro (u,m);
oggetti.add(i);}
//ora controllo che la sequenza di tipo Figure3D abbia oggetti al suo interno
if(oggetti.isEmpty())
out.println("Seq.vuota");
else out.println("Sequenza piena");
} //chiusura del while d'acquisizione degli oggetti nella sequenza denominata "oggetti"
il problema è questo: io devo fare in modo di riuscire a leggere da un file di testo i nomi di alcune figure geometriche seguiti dai rispettivi valori.
X leggere il nome uso StringTokenizer e poi confronto il suo contenuto(passandolo ad una variabile di tipo String) nel ciclo if.
in base alla figura letta vado a costruire un oggetto equivalente a tal figura e lo memorizzo
nella sequenza di oggetti denominata appunto "oggetti"
Xò poi alla fine del codice come vedrete effettuo un controllo con il metodo size()(che mi da un valore int indicante il numero di oggetti contenuti nella sequenza) e mi da come risultato
0
nel caso il controllo lo faccia dentro il while mi da
0
0
0
0
0
0
0
0
0
.... considerate che il file ha 9 righe di testo contenenti 9 figure, ma dovrebbe darmi 9, invece mi da quel risultato li! xdi + se esco dal while è come se mi perdesse il contenuto della variabile oggetti di tipo Sequenza...