Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    eclipse. out of memory error

    ho 3 file.
    1. un file di prodotti (codice prodotto, descrizione, prezzo)
    2.un file di magazzini (codice magazzino, indirizzo ecc)
    3.un file di giacenze (codice prodotto, cod magazzino e quantità)
    devo scrivere un programma che dato un codice prodotto restituisce l'elenco dei magazzini che lo contengono.

    il punto è che mi dà un errore che non mi era mai uscito prima ossia:
    exeption in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:2760)
    at java.util.Arrays.copyOf(Arrays.java:2734)
    at java.util.ArrayList.ensureCapacity(ArrayList.java: 167)
    at java.util.ArrayList.add(ArrayList.java:351)
    at Azienda2.<init>(Azienda2.java:22)
    at Tester.main(Tester.java:26)

    le classi sono queste:
    CLASSE PRODOTTO:
    codice:
    import java.io.PrintStream;
    import java.util.Scanner;
    
    
    public class Prodotto {
    	private String codiceProdotto;
    	private String descrizione;
    	private double prezzo;
    	
    	public Prodotto(String aCodiceProdotto, String aDescrizione, double aPrezzo) {
    		this.codiceProdotto=aCodiceProdotto;
    		this.descrizione=aDescrizione;
    		this.prezzo=aPrezzo;
    	}
    
    	public String getCodiceProdotto() {
    		return codiceProdotto;
    	}
    	
    	public String getDescrizione() {
    		return descrizione;
    	}
    	
    	public double getPrezzo() {
    		return prezzo;
    	}
    	
    	public void setPrezzo(double aPrezzo) {
    		prezzo=aPrezzo;
    	}
    	
    	public String toString() {
    		return "Codice prodotto: " + codiceProdotto + "\n"
    		+ "Descrizione: " + descrizione + "\n" 
    		 +" Prezzo: " + prezzo;
    	}
    	
    	public void print (PrintStream ps) {
    		ps.println(codiceProdotto);
    		ps.println(descrizione);
    		ps.println(prezzo);
    	}
    	
    	public static Prodotto read (Scanner s) {
    		if(!s.hasNext())
    			return null;
    		String codiceProdotto=s.nextLine();
    		
    		if(!s.hasNext())
    			return null;
    		String descrizione=s.nextLine();
    		
    		if(!s.hasNext())
    			return null;
    		double prezzo=Double.parseDouble(s.nextLine());
    		
    		Prodotto p= new Prodotto (codiceProdotto, descrizione, prezzo);
    		return p;
    		
    		
    	}
    	
    }

    CLASSE MAGAZZINO:

    codice:
    import java.io.PrintStream;
    import java.util.Scanner;
    
    
    public class Magazzino {
    	private String codiceMagazzino;
    	private String indirizzo;
    	private String città;
        private String nazione;
        private int telefono;
        private int fax;
        
        public Magazzino(String aCodiceMagazzino, String aIndirizzo, String aCittà, String aNazione, int aTelefono, int aFax) {
        	this.codiceMagazzino=aCodiceMagazzino;
        	this.indirizzo=aIndirizzo;
        	this.città=aCittà;
        	this.nazione=aNazione;
        	this.telefono=aTelefono;
        	this.fax=aFax;
        }
        
        public String getCodiceMagazzino() {
        	return codiceMagazzino;
        }
        
        public String getIndirizzo() {
        	return indirizzo;
        }
        
        public String getCittà() {
        	return città;
        }
        
        public String getNazione() {
        	return nazione;
        }
        
        public int getTelefono() {
        	return telefono;
        }
        
        public int getFax () {
        	return fax;
        }
        
        public String toString() {
        	return "Codice magazzino: " + codiceMagazzino + "\n" +
        	"Indirizzo: " + indirizzo + "\n" +
        	"Città: " + città + "\n" + 
        	"Nazione: " + nazione +"\n" +
        	"Telefono: " + telefono + "\n" + 
        	"Fax: " + fax;
        }
        
        public void print (PrintStream ps) {
        	ps.println(codiceMagazzino);
        	ps.println(indirizzo);
        	ps.println(città);
        	ps.println (nazione);
        	ps.println(telefono);
        	ps.println(fax);
        }
        
        public static Magazzino read (Scanner s2) {
        	if(s2.hasNext())
        		return null;
        	String codiceMagazzino=s2.nextLine();
        	
        	if(s2.hasNext())
        		return null;
        	String indirizzo=s2.nextLine();
        	
        	if(s2.hasNext())
        		return null;
        	String città=s2.nextLine();
        	
        	if(s2.hasNext())
        		return null;
        	String nazione=s2.nextLine();
        	
        	if(s2.hasNextInt())
        		return null;
        	int telefono=s2.nextInt();
        	
        	if(s2.hasNextInt())
        		return null;
        	int fax=s2.nextInt();
        	
        	Magazzino m=new Magazzino (codiceMagazzino, indirizzo, città, nazione, telefono, fax);
        	return m;
        	
        }
    }

    CLASSE GIACENZA:

    codice:
    import java.io.PrintStream;
    import java.util.Scanner;
    
    
    public class Giacenza {
    	private String codiceProdotto;
    	private String codiceMagazzino;
    	private int quantità;
    
    	public Giacenza (String aCodiceProdotto, String aCodiceMagazzino, int aQuantità) {
    		this.codiceProdotto=aCodiceProdotto;
    		this.codiceMagazzino=aCodiceMagazzino;
    	}
    
    
    	public String getCodiceProdotto() {
    		return codiceProdotto;
    	}
    	
    	public String getCodiceMagazzino() {
    		return codiceMagazzino;
    	}
    	
    	public int getQuantità() {
    		return quantità;
    	}
    	
    	public void setQuantità(int aQuantità) {
    		quantità=aQuantità;
    	}
    	
    	public String toString() {
    		return "Codice prodotto: " +codiceProdotto + "\n" + 
    		"Codice magazzino: " +codiceMagazzino + "\n" +
    		"Quantità: " + quantità;
    	}
    	
    	public void print (PrintStream ps) {
    		ps.println(codiceProdotto);
    		ps.println(codiceMagazzino);
    		ps.println(quantità);
    	}
    	
    	public static Giacenza read (Scanner s3) {
    		if(s3.hasNext())
    			return null;
    		String codiceProdotto=s3.nextLine();
    		
    		if(s3.hasNext())
    			return null;
    		String codiceMagazzino=s3.nextLine();
    		
    		if(s3.hasNextInt())
    			return null;
    		int quantità=s3.nextInt();
    		
    		Giacenza g=new Giacenza (codiceProdotto, codiceMagazzino, quantità);
    		return g;
    	}
    }

    CLASSE AZIENDA:
    codice:
    import java.util.ArrayList;
    import java.util.Scanner;
    
    
    public class Azienda2 {
    	private ArrayList <Prodotto> prodotti;
    	private ArrayList <Magazzino> magazzini;
    	private ArrayList <Giacenza> giacenze;
    	
    	public Azienda2(Scanner s, Scanner s2, Scanner s3) {
    		prodotti= new ArrayList <Prodotto>();
    		magazzini=new ArrayList <Magazzino>();
    		giacenze=new ArrayList <Giacenza>();
    		
    		while(s.hasNext()) {
    			Prodotto p = Prodotto.read(s);
    			prodotti.add(p);
    		}
    		
    		while(s2.hasNext()) {
    			Magazzino m=Magazzino.read(s2);
    			magazzini.add(m);
    		}
    		
    		while(s3.hasNext()) {
    			Giacenza g=Giacenza.read(s3);
    			giacenze.add(g);
    		}
    		
    	}
    	
    	public void stampaArchivio() {
    		for(Prodotto p: prodotti)
    			System.out.println(p);
    	}
    	
    	public void elencoMagazzini(String aCodiceProdotto){
    		for(Giacenza g: giacenze){
    			if(aCodiceProdotto.equalsIgnoreCase(g.getCodiceProdotto()))
    			for(Prodotto p: prodotti)
    				if(g.getCodiceProdotto().equalsIgnoreCase(p.getCodiceProdotto()))
    			for(Magazzino m: magazzini)
    		if(g.getCodiceMagazzino()==m.getCodiceMagazzino())
    			System.out.println(m); 
    			
    	} }
    	
    	
    
    }

    E INFINE IL TESTER:

    codice:
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.util.Scanner;
    
    
    public class Tester {
    
    	public static void main(String[] args) throws FileNotFoundException {
    		
    		String percorso="/Users/alinagnerre/Desktop/ProdottoFile.txt";
    		File f=new File(percorso);
    		FileReader fr=new FileReader(f);
    		Scanner s=new Scanner (fr);
    		
    		String percorso2="/Users/alinagnerre/Desktop/MagazzinoFile.txt";
    		File f2=new File (percorso2);
    		FileReader fr2=new FileReader(f2);
    		Scanner s2=new Scanner (fr2);
    		
    		String percorso3="/Users/alinagnerre/Desktop/GiacenzaFile.txt";
    		File f3=new File (percorso3);
    		FileReader fr3=new FileReader(f3);
    		Scanner s3=new Scanner (fr3);
    		
    		Azienda2 azienda2=new Azienda2 (s, s2, s3);
    		
    		azienda2.stampaArchivio();
    		azienda2.elencoMagazzini("1x");
    		
    		
    
    	}
    
    }

    SE POTETE SPIEGARMI DOVE HO SBAGLIATO?? GRAZIEEEEE

  2. #2
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    l'errore è chiaro... occupi troppa memoria

  3. #3
    ma perchè? ho sempre fatto cose del genere e nn mi ha dato mai questo tipo di problema...

  4. #4
    Originariamente inviato da cavolinauff
    ma perchè? ho sempre fatto cose del genere e nn mi ha dato mai questo tipo di problema...
    Una domanda: perchè non serializzi le classi in modo da leggere e caricare senza troppe complicazioni le rispettive istanze?

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Originariamente inviato da cavolinauff
    le classi sono queste:
    [...]
    Il codice va formattato usando il tag [CODE], come da Regolamento.

    Qui ho provveduto io a farlo; in futuro, provvedi tu.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    Originariamente inviato da cavolinauff
    ma perchè? ho sempre fatto cose del genere e nn mi ha dato mai questo tipo di problema...
    Quanto sono grandi i file di testo??? Così facendo per ogni riga crei un oggetto finchè occupi tutto l'heap che ti va in overflow ancor prima di caricare le giacenze, devi filtrare i dati e mettere in memoria solo quelli che utilizzi...... Certo con un db sarebbe più semplice

  7. #7
    i file sono grandi poche righe, giusto per testare il programma. non mi ha mai dato questo tipo di errore non so perchè ora lo fa.

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.