Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    30

    Leggere un file e riempire un arrayList

    Ciao a tutti! Ho un problema per quanto riguarda l'aggiunta di oggetti in un arrayList.
    Ho due classi: Room e BookingModel. Nella classe Room leggo il file e nella classe BookingModel creo l'arrayList e aggiungo le varie Room.
    Il file che leggo è un .txt fatto così:
    codice:
    Torino,22,V
    Milano,44,N
    Roma,430,V
    Napoli,55,V
    Siracusa,230,N
    Il mio problema è che aggiunge solo Torino,22,V al mio ArrayList e non tutte le altre righe del testo. Vi copio il codice così è più chiaro.

    codice:
    public class Room  {
    	private String nome;
    	private int capienza;
    	private boolean videoproiettorePresente;
    	BookingModel bm;
    
    	public Room(String n, int c, boolean v){
            this.nome=n;      this.capienza=c;       this.videoproiettorePresente=v;
    			
    	try{
            File filePrenotazioni=new File("sale.csv");
    	BufferedReader reader=new BufferedReader(new FileReader(filePrenotazioni));
            String line=null;
    		while((line=reader.readLine())!=null){
    			System.out.println(line);
    			Scanner s=new Scanner(line).useDelimiter(",");
    			if(s.hasNext()){
    	                nome=s.next();
    			capienza=s.nextInt();
    			boolean videoproiettorePresente;
    					if (s.next().equals("V")) {
    						videoproiettorePresente = true;
    					} else {		
    						videoproiettorePresente = false;
    					}
    System.out.println("I token delle prenotazioni sono "+nome+capienza+videoproiettorePresente);
    bm.addSala(nome,capienza,videoproiettorePresente);
    		    }
    		  }
    		}catch(Exception e){
    		}
    }
    codice:
    public class BookingModel extends AbstractTableModel {
    private List<Room> rooms;
    public BookingModel() {
    	rooms=new ArrayList<Room>();
    	System.out.println("La dimensione è: "+rooms.size());
    	
    	Room r=new Room("", 0, true);
    	rooms.add(r);
    
    	System.out.println("La dimensione è: "+rooms.size());
    }
    	public void addSala(String nome, int capienza, boolean videoproiettorePresente)throws Exception {
    		
    	Room r=new Room(nome,capienza,videoproiettorePresente);
    	rooms.add(r);
    	fireTableRowsInserted(rooms.size()-1, rooms.size()-1);	
    
    	}
    Grazie mille

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Leggere un file e riempire un arrayList

    Originariamente inviato da Fire_89
    Il mio problema è che aggiunge solo Torino,22,V al mio ArrayList e non tutte le altre righe del testo.
    Innanzitutto non è affatto bello, dal punto di vista del "design" delle classi, il fatto che in Room c'è (oltretutto nel costruttore!) la logica di lettura del file e allo stesso tempo Room fa da "value class" per gli oggetti nella lista contenuta in BookingModel.

    Ma a parte questo, io non vedo cose tecniche palesemente errate. Cioè il ciclo di lettura mi pare corretto e pure l'inserimento nel model con relativo "fire" dell'evento mi pare corretto.

    EDIT: noooo alt. In BookingModel invochi il costruttore di Room che fa la lettura del file ... è ricorsivo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    30
    Ah ok..quindi cosa devo modificare in BookingModel?? Grazie

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Quando posti del codice, usa gli appositi tag CODE, come richiesto dal regolamento interno.

    Qui li ho aggiunti io.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    30
    Scusami certo sarà fatto

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    primo consiglio: cerca di avvicinarti alla logica ad oggetti.
    Da un lato hai una classe che MODELLIZZA ciò che ti interessa (Room), un conto è la classe che si occupa di gestire l'aggregato.

    Room avrà solo le sue proprietà, metodi getter e setter, altre operazioni da te ritenute utili, ma in genere non deve gestire mai informazioni sull'aggregato (e riempire l'aggregato fa parte di questo).

    Quindi oltre a Room avrai sicuramente una classe che si occupa della gestione del tuo piccolo archivio.

    Hai un tuo TableModel, questo ha i suoi metodi, ma in generale anche questo non si occupa di CREARE la struttura dati su cui lavora, si occupa di gestirla (in particolare si occupa di dire cosa c'è riga per riga e chi sono le colonne).
    E' plausibile che la tua classe BookinModel abbia 2 costruttori, uno di default (senza parametri) in cui la tua lista interna la inizializzi a lista vuota, una che prende l'array, la lista o cmq l'aggregato con i tuoi dati.
    Avrai anche un setter / getter per settare /prelevare la tua lista di dati.

    Infine, quello che potrebbe essere il tuo main fa nell'ordine:
    1. caricare la lista (cioè leggi il file, riempi oggetti Room e mettili nell'aggregato)
    2. istanzia l'oggetto BookingModel con la lista appena costruita
    3. continua come ti interessa.

    Questo è più o meno come funziona questo tipo di architettura (vai a vedere MVC (model view controller), model è il tuo modello, controller è il tuo main, view è la tabella che visualizzi)
    RTFM Read That F*** Manual!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    30
    Grazie per le risposte..come mi avete suggerito ho tolto il bocco try catch che legge il file dalla classe Room e l'ho messo in'un'altra classe.Ora funziona..grazie mille

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Problema diverso -> discussione diversa.
    Altrimenti il forum perde la sua utilità.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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