Visualizzazione dei risultati da 1 a 8 su 8

Discussione: aiuto metodo main

  1. #1

    aiuto metodo main

    ciao a tutti. sto cercando di realizzare un codice per creare una classe che disponga di tre metodi per creare un nome di file completo.
    il primo metodo si aspetta solo il percorso del file, il secondo anche un prefisso per il nome del file e il terzo anche un suffisso.
    per esempio potrebbe essere /usr/home/test.tmp

    ecco il codice:
    codice:
    package nomefile;
    
    class NomeFile {public static void main(String[] args) throws Exception {} 
    	public String creaNome( String percorso ) {
    		return creaNome( percorso, "", "TMP" );
    	}
    	public String creaNome( String percorso, String prefisso ) {
    		return creaNome( percorso, "", "tmp" );
    	}
    	public String creaNome( String percorso, String prefisso, String suffisso ) {
    		return percorso + "/" + prefisso + "."  + suffisso;
    	}
    }

    il problema è: all' esecuzione del programma dove vedo visualizzato il risultato(cioè il nome completo?)

    attualmente all' esecuzione non succede niente. immagino sia perché non ho descritto le istruzioni nel metodo main. cosa dovrei scrivere nel metodo main per arrivare al risultato?

    grazie mille

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    all' esecuzione del programma dove vedo visualizzato il risultato(cioè il nome completo?)

    Dipende da dove lo indirizzi tu. Se lo butti sulla console (con System.out.println() ) lo vedrai nella console; se lo butti in un componente grafico (di una finestra visualizzata a video) lo vedrai lì dentro; se lo mando in pasto ad una query SQL su un DB lo vedrai dentro al campo del DB... insomma: dove visualizzarlo lo decidi tu.

    Ovviamente, se nel metodo main() non scrivi nulla, l'esecuzione non farà nulla.
    Se vuoi visualizzare qualcosa ad esempio nella console dovrai fare delle stampe ( quindi System.out.println() ) di ciò che vuoi vedere stampato a video.

    Visti i tuoi tre metodi, dovrai prima di tutto istanziare un oggetto di tipo NomeFile, quindi invocare uno di quei metodi sull'oggetto istanziato, passandogli dei parametri e salvare il risultato dell'invocazione in una variabile String... oppure mandare direttamente in stampa il risultato.


    codice:
    public static void main(String[] args) throws Exception {
       // Istanzio un oggetto di tipo NomeFile
       NomeFile nf = new NomeFile();
    
       // Esempio 1: invoco il metodo creaNome() con un solo parametro
       // e salvo il risultato in una variabile stringa, che poi stamperò
       String risultato = nf.creaNome("/usr/directory/");
       System.out.println( risultato );
    
       // Esempio 2: invoco il metodo creaNome() con due parametri
       // e butto in output direttamente il risultato
       System.out.println( nf.creaNome("/usr/directory/", "prefix") );
    }

    Ciao.
    Ultima modifica di LeleFT; 27-01-2015 a 16:02
    "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

  3. #3
    a parte che il metodo
    codice:
    publicString creaNome(String percorso,String prefisso ){
            return creaNome( percorso,"","tmp");
        }
    

    E' sbagliato (trova tu l'errore....).
    un ipotetico main potrebbe essere
    codice:
    public static void main(String[]args)
    {
        NomeFile nomeFile = new NomeFile();
        String nomeSoloPercorso = nomeFile.
    codice:
    creaNome("/usr");
        System.out.println("CREA NOME SOLO PERCORSO RITORNA "+nomeSoloPercorso );
        .....
    
    }
    


    Ovviamente al posto dei ... sta a te mettere le chiamate ad altri metodi etc...

  4. #4
    grazie Lele e Francesco.
    ho scritto il seguente codice:

    codice:
    package nomefile;
    
    class NomeFile {public static void main(String[] args) throws Exception
            
    { NomeFile nf = new NomeFile();
    
    
    
    
    String risultato = nf.creaNome("/usr/directory/");
    System.out.println(risultato);
    
    
    }
        public String creaNome( String percorso ) {
            return creaNome( percorso);
        }
        public String creaNome( String percorso, String prefisso ) {
            return creaNome( percorso, "", "tmp" );
        }
        public String creaNome( String percorso, String prefisso, String suffisso ) {
            return percorso + "/" + prefisso + "."  + suffisso;
        }
            ;
            
    }

    non mi segnala nessun hint, ma all' esecuzione mi dà errore! come mai?

    grazie ancora

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Il metodo con un solo parametro è errato:


    codice:
    public String creaNome( String percorso ) {
       return creaNome( percorso);
    }

    Richiama sé stesso in ricorsione infinita... andrà certamente in OutOfMemoryError.

    Inoltre, come già suggerito da francesco.muia, anche il metodo con 2 parametri è "concettualmente" sbagliato.


    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

  6. #6
    grazie Lele.
    scusate se approfitto di voi:
    vorrei chiedere ancora una cosa. un esercizio più semplice, per capire come funzionano i metodi:
    chiamare il metodo media, che calcola la media di tre numeri:

    codice:
    package matematica;
    
    /**
     *
     * @author
     */
    public class Matematica {
    public int media (int a, int b, int c) {
    
    
        int somma = a + b + c;
        int media = (int) (somma/ 3.0);
        return media;
    }
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
        int medias = media(2, 6, 10);
        
        System.out.println(medias);
        // TODO code application logic here
        }
        
    }

    alla riga "int medias = media(2, 6, 10); mi dà l' errore non-static method media (int, int, int) cannot be referenced from a static context.

    cosa c' è di sbagliato?

    grazie!

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    I metodi (e le variabili) NON STATICI (cioè dichiarati senza il modificatore static) sono legati ad una istanza della classe in cui sono dichiarati. Vanno, cioè, invocato su una particolare istanza della classe.

    I metodi (e le variabili) STATICI (cioè dichiarati con il modificatore static, come il main), al contrario, non sono legati alla singola istanza, ma direttamente alla classe (sono, cioè, comuni a tutte le istanze della classe e vivono anche senza alcuna istanza).

    Chiaramente, al'interno di un contesto statico (ed il main lo è, appunto) non ci si può riferire ad un metodo (o ad una variabile) non static, poichè non ha alcun senso: ciascuna istanza della classe può eseguire il metodo in modi diversi a seconda del proprio stato interno, se lo richiamassi senza riferirmi ad una particolare istanza, non si saprebbe che cosa fare.

    Di conseguenza, se vuoi poter richiamare quel metodo dall'interno del main (senza avere un'istanza della classe a cui fare riferimento) devi dichiararlo static.

    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

  8. #8
    grazie mille Lele!!

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.