Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Problema metodi...

  1. #1

    Problema metodi...

    Ciao a tutti. Riscontro uno strano problema nella gestione dei metodi.
    codice:
    import java.io.*;
    import java.util.*;
    
    public class Hardware
    {
    	static int accountNumber = 0;
    	static String name = null;
    	static int number = 0;
    	static double price = 0.0;
    	
    	static RandomAccessFile file = null;
    	
    	public static void openFile()
    	{		
    		File vfile = new File("hardware.dat");
    		if (!vfile.exists())
    		{
    			try
    			{
    				file = new RandomAccessFile("hardware.dat","rw");
    				for (int i=0;i<100;i++)
    				{
    					file.writeInt(accountNumber);
    					writeString(name,file);
    					file.writeInt(number);
    					file.writeDouble(price);
    				}
    			}
    			catch (IOException e)
    			{
    				System.err.println("Errore nella creazione del file");
    			}
    		}
    		public static void writeString(String name,RandomAccessFile file) throws IOException
    		{
    			StringBuffer buffer = null;
    			if (name != null)
    			{
    				buffer = new StringBuffer(name);
    			}
    			else
    			{
    				buffer = new StringBuffer(15);
    			}
    			file.writeChars(buffer.toString());
    		}
    	}
    	
    	public static void addRecords()
    	{
    	}
    	
    	public static void closeFile()
    	{
    	}
    	
    	public static void main(String[] args)
    	{
    		openFile();
    	}
    }
    Così come sta impostato, il programma non funziona. Se invece io sposto il metodo writeString() fuori da openFile(), il programma funziona. Ma perchè se lo lascio in openFile() non funziona?? :look:

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

    Re: Problema metodi...

    Originariamente inviato da Dreamer89
    Così come sta impostato, il programma non funziona. Se invece io sposto il metodo writeString() fuori da openFile(), il programma funziona. Ma perchè se lo lascio in openFile() non funziona?? :look:
    A parte il fatto che il sorgente che hai postato è sbagliato come sintassi in quanto il metodo writeString l'hai dichiarato dentro il metodo openFile. E ovviamente non compila. (non si possono dichiarare metodi dentro metodi!)

    Poi comunque il metodo writeString non ha molto senso .... che ti serve a fare un StringBuffer??
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Re: Re: Problema metodi...

    Originariamente inviato da andbin
    A parte il fatto che il sorgente che hai postato è sbagliato come sintassi in quanto il metodo writeString l'hai dichiarato dentro il metodo openFile. E ovviamente non compila. (non si possono dichiarare metodi dentro metodi!)

    Poi comunque il metodo writeString non ha molto senso .... che ti serve a fare un StringBuffer??
    Quindi non è possibile dichiarare metodi in metodi? Ho usato StringBuffer perchè così posso operare dinamicamente sulle stringhe... ho dimenticato di impostare la lunghezza a 15 con setLength alla StringBuffer. Ho usato questo perchè così mi ha consigliato il libro, dato che devo creare un file ad accesso casuale ho bisogno di impostare le stringhe ad una dimensione fissa e lo faccio con StringBuffer. Se posso farlo anche con String, questo non lo so, sto solo seguendo il libro...

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

    Re: Re: Re: Problema metodi...

    Originariamente inviato da Dreamer89
    Quindi non è possibile dichiarare metodi in metodi?
    No. Puoi dichiarare una classe dentro un metodo (method-local inner class) ma non un metodo direttamente dentro un metodo!

    Originariamente inviato da Dreamer89
    Ho usato StringBuffer perchè così posso operare dinamicamente sulle stringhe... ho dimenticato di impostare la lunghezza a 15 con setLength alla StringBuffer.
    Ma se fai un setLength(15) e la stringa aveva meno di 15 caratteri, lo StringBuffer viene fillato con caratteri nulli '\u0000'. È questo che vuoi??
    E poi se fai new StringBuffer(15) non viene creato uno StringBuffer che rappresenta una stringa di 15 caratteri ma uno StringBuffer vuoto (length() = 0) con "capacità" di 15 caratteri. Quindi l'intero che passi al costruttore è la "capacità" non la lunghezza reale.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5

    Re: Re: Re: Re: Problema metodi...

    Originariamente inviato da andbin
    No. Puoi dichiarare una classe dentro un metodo (method-local inner class) ma non un metodo direttamente dentro un metodo!

    Ma se fai un setLength(15) e la stringa aveva meno di 15 caratteri, lo StringBuffer viene fillato con caratteri nulli '\u0000'. È questo che vuoi??
    E poi se fai new StringBuffer(15) non viene creato uno StringBuffer che rappresenta una stringa di 15 caratteri ma uno StringBuffer vuoto (length() = 0) con "capacità" di 15 caratteri. Quindi l'intero che passi al costruttore è la "capacità" non la lunghezza reale.

    Ti dico solo che il programma presentato nel libro funziona perfettamente ^^ Ora ne sto creando uno simile per esercitarmi un pochino... magari mi sfugge qualcosa, poi vedrò

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.