Visualizzazione dei risultati da 1 a 7 su 7

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    3

    [Java] Informazione su "semplice" programma Java

    Salve a tutti.
    Vorrei imparare il linguaggio Java, ho letto il regolamento e una parte dice di non postare domande se non si è già pratici di qualche linguaggio, ecco, io non conosco ancora nessun linguaggio e sono all'inizio per quanto riguarda Java, quindi non so se posso porvi questa domanda.
    Sto studiando il famoso testo di Claudio De Sio e sono ancora al livello di classi, oggetti, variabili, metodi e costruttori. I concetti di Classe, oggetti, variabili e metodi() li ho capiti teoricamente, in pratica invece no.
    Cercando di capire qualcosa e venirne a capo ho cercato molti tutorial ecc. Sono arrivato al punto (per far pratica) di voler creare un programmino che mi dica quante ore, minuti e secondi ci sono in un anno usando però tre Classi, quella principale contenete ovviamente il metodo main() in modo da poter utilizzare uno o più metodi() e quindi capirne il loro utilizzo e la loro funzione nell'ambito pratico, se possibile inserire un Costruttore() ben venga...
    In pratica sto chiedendo aiuto, il regolamento per un novizio lo vieterebbe (penso), ma da qualche parte ho letto che i migliori modi per apprendere sono: lettura, scrittura, ascolto, discussione e pratica. Per me le discussioni sono importanti per poter capire alcuni concetti che da solo mi confusionano.

    Per il momento ho scritto questo codice (con Notepad) creando due Classi. Una, quella principale chiamata OreMinutiSecondi:
    codice:
    public class OreMinutiSecondi{
        public static void main(String args[])
        {
             MesiAnno ore = new MesiAnno();
            ore.stampaOre();
        }
    }
    E l'altra chiamata MesiAnno:

    codice:
    public class MesiAnno{
        public void stampaOre()
        {
                int gennaio = 24*31;
            int febbraio = 24*28;
            int marzo = 24*31;
            int aprile = 24*30;
            int maggio = 24*31;
            int giugno = 24*30;
            int luglio = 24*31;
            int agosto = 24*31;
            int settembre = 24*30;
            int ottobre = 24*31;
            int novembre = 24*30;
            int dicembre = 24*31;
            System.out.println(ore);
        }
    }
    Quindi io dovrei riuscire a creare un oggetto che racchiude tutti i mesi dell'Anno con le relative variabili in modo da poterne stampare a schermo il totale delle ore, sono fermo a questo punto, ho provato creando un oggetto nella classe MesiAnno e poi scriverlo assieme ai vari mesi utilizzando il pulsante "dot" che dovrebbe voler dire "appartenenza", oppure utilizzando il tasto "=" in modo da definirne il valore uguale, ma alla fine riscontro molti errori in fase di compilazione. Al momento vorrei non utilizzare Eclipse ma capirne bene le basi con l'editor normale. In questo caso quale sarebbe la procedura corretta da utilizzare?
    Ringrazio tutti per l'occasione datami. Ciao

  2. #2
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ciao, ti posto una possibile implementazione:
    codice:
    public class Anno {
    	
    	static final String[] mesi = {"Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"};
    	static final int[] giorni = {31,28,31,30,31,30,31,31,30,31,30,31};
    	static final int ORE_IN_UN_GIORNO = 24;
    	
    	public Anno() {
    		// costruttore vuoto
    	}
    	
    	/**
    	 * Stampa la lista dei mesi e dei giorni che li compongono
    	 */
    	public void stampaMesi() {
    		for(int i=0; i<mesi.length; i++) System.out.println(mesi[i]+": "+giorni[i]);
    	}	
    	
    	/**
    	 * Calcola le ore in un anno facendo la somma delle ore presenti nei vari mesi
    	 * @return le ore presenti in un anno
    	 */
    	public int oreInUnAnno() {
    		int ore = 0;
    		for(int i=0; i<mesi.length; i++) {
    			ore += giorni[i]*ORE_IN_UN_GIORNO;
    		}
    		return ore;
    	}
    	
    	/**
    	 * Metodo main
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		Anno anno = new Anno();
    		
    		anno.stampaMesi();
    		System.out.println();
    		System.out.println("In un anno ci sono "+anno.oreInUnAnno()+" ore.");
    	}
    
    
    }
    In realtà un approccio più Object-Oriented sarebbe probabilmente quello di definire una classe Giorno, quindi un oggetto di tipo Mese (visto come un insieme di giorni) e infine un oggetto di tipo Anno (visto come un insieme di mesi).

  3. #3
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Riguardo a quello che ti accennavo prima, questa è una possibile (e parziale) implementazione basata su tre classi.

    Classe Giorno:
    codice:
    public class Giorno {
        
        static final int ORE_IN_UN_GIORNO = 24;
        
        public Giorno() {}
        
        public int getOre() {
            return ORE_IN_UN_GIORNO;
        }
    }

    Classe Mese:
    codice:
    public class Mese {
        
        private int numGiorni;
        private Giorno[] giorni;
        
        public Mese(int numGiorni) {
            this.numGiorni = numGiorni;
            this.giorni = new Giorno[numGiorni];
            for(int i=0; i<numGiorni; i++) giorni[i] = new Giorno();
        }
        
        public int getOre() {
            int ore=0;
            for(int i=0; i<numGiorni; i++) ore += giorni[i].getOre();
            return ore;
        }
    }

    Classe Anno:
    codice:
    public class Anno {
        
        static final int NUM_MESI = 12;
        private Mese[] mesi;
        
        public Anno() {
            this.mesi = new Mese[NUM_MESI];
            mesi[0] = new Mese(31);
            mesi[1] = new Mese(28);
            mesi[2] = new Mese(31);
            mesi[3] = new Mese(30);
            mesi[4] = new Mese(31);
            mesi[5] = new Mese(30);
            mesi[6] = new Mese(31);
            mesi[7] = new Mese(31);
            mesi[8] = new Mese(30);
            mesi[9] = new Mese(31);
            mesi[10] = new Mese(30);
            mesi[11] = new Mese(31);
        }
        
        public int getOre() {
            int ore=0;
            for(int i=0; i<NUM_MESI; i++) ore += mesi[i].getOre();
            return ore;
        }
        
        
        public static void main(String[] args) {
            Anno anno = new Anno();
            
            System.out.println("In un anno ci sono "+anno.getOre()+" ore.");
        }
    }
    Questo è solo uno "scheletro": mancano tanti dettagli come metodi getter e setter, ecc. Però intanto puoi provare a dare un'occhiata.


  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    3
    Ti ringrazio tanto..
    Caspita, non pensavo fosse cosi "complicato", sono due ore che cerco di mettere assieme il tutto ma non ci riesco, non capisco, allora:
    nella classe Giorno creo una costante ORE_IN_UN_GIORNO e gli assegno il valore 24, poi creo un costruttore Giorno(); vuoto, quindi è come se ci fosse il costruttore di default? cioè, perchè vuoto senza codice al suo interno, a cosa serve?
    infine si crea un metodo di nome getOre con all'interno il compito di ritornarmi il valore della costante ORE_IN_UN_GIORNO.

    Nella classe Mese invece si crea una sua istanza privata, quindi non accessibile da altre classi, di nome numGiorni; Chiamo il costruttore Giorno[] (perchè le parentesi quadre?, e perchè privato anche questo?) e gli creo una variabile di nome giorni;
    Creo il costruttore Mese, gli assegno il parametro intero numGiorni e gli dico this.numGiorni = numGiorni; perchè?, this dovrebbe risolvere i problemi relativi all'appartenenza di un oggetto, ma non capisco il nesso. Poi ancora this.giorni = new Giorno[numGiorni]; Si spiega che this.giorni è una nuova istanza della classe Giorno.
    il ciclo for... "i" è uguale a "0"; "i" è minore di numGiorni; "i++" che aumenta in progressione il valore di "i"; giorni ha un parametro[i]; e invoco il costruttore Giorno();
    Chiamo il metodo getOre che mi restituisce la costante ORE_IN_UN_GIORNO e gli dico che l'oggetto ore è uguale a zero;
    uso il ciclo for ("i" è uguale a "0"; "i" è minore di numGiorni; "i++" che aumenta in progressione il valore di "i"); ore += giorni[i].getOre();
    return ore;
    Quì mi sono perso ancora di più!
    Non ce la faccio a continuare, anche perchè dubito che mi rispondete dopo aver letto quello che ho scritto
    Forse non sono portato

  5. #5
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ciao, ho aggiunto parecchi commenti al codice. Prova a riguardarlo e poi ci dici quali dubbi ti sono rimasti.

    Classe Giorno
    codice:
    public class Giorno {
    	
    	// costante
    	static final int ORE_IN_UN_GIORNO = 24;
    	
    	// costruttore vuoto
    	// serve solo ad istanziare la classe
    	public Giorno() {}
    	
    	public int getOre() {
    		// ritorna il numero di ore in un giorno
    		return ORE_IN_UN_GIORNO;
    	}
    
    
    }

    Classe Mese:
    codice:
    public class Mese {
    	
    	// ogni mese ha un suo numero di giorni
    	private int numGiorni;
    	
    	// array (NON COSTRUTTORE!) di oggetti di tipo Giorno
    	// cioè ogni oggetto di tipo Mese è caratterizzato da
    	// un insieme di oggetti di tipo Giorno
    	private Giorno[] giorni;
    	
    	// costruttore di Mese: gli passi il numero di giorni
    	// da cui il mese è composto
    	public Mese(int numGiorni) {
    		// specifichi che il campo numGiorni del Mese assume
    		// il valore passato al costruttore
    		this.numGiorni = numGiorni;
    		
    		// l'array dovrà avere tante "celle" quanti sono
    		// i giorni di questo particolare mese
    		this.giorni = new Giorno[numGiorni];
    		
    		// istanzio ogni giorno all'interno dell'array
    		for(int i=0; i<numGiorni; i++) giorni[i] = new Giorno();
    	}
    	
    	
    	/**
    	 * Metodo che ritorna il numero di ore all'interno di questo
    	 * mese, facendo la somma delle ore giorno per giorno
    	 * 
    	 * @return il numero di ore all'interno del mese
    	 */
    	public int getOre() {
    		int ore=0;
    		for(int i=0; i<numGiorni; i++) ore += giorni[i].getOre();
    		return ore;
    	}
    
    
    }

    Classe Anno:
    codice:
    public class Anno {
    	
    	// costante: ogni anno è composto da 12 mesi
    	static final int NUM_MESI = 12;
    	
    	// array (NON COSTRUTTORE) di Mesi
    	// ogni anno è caratterizzato da un insieme di mesi
    	private Mese[] mesi;
    	
    	public Anno() {
    		// l'array deve essere composto da 12 "caselle"
    		this.mesi = new Mese[NUM_MESI];
    		
    		// istanzio uno ad uno ogni mese, specificando
    		// il numero di giorni da cui è composto		
    		mesi[0] = new Mese(31);
    		mesi[1] = new Mese(28);
    		mesi[2] = new Mese(31);
    		mesi[3] = new Mese(30);
    		mesi[4] = new Mese(31);
    		mesi[5] = new Mese(30);
    		mesi[6] = new Mese(31);
    		mesi[7] = new Mese(31);
    		mesi[8] = new Mese(30);
    		mesi[9] = new Mese(31);
    		mesi[10] = new Mese(30);
    		mesi[11] = new Mese(31);
    	}
    	
    	
    	/**
    	 * Ritorna il numero di ore all'interno dell'anno, facendo la
    	 * somma delle ore all'interno dei vari mesi
    	 * @return il numero di ore nell'anno
    	 */
    	public int getOre() {
    		int ore=0;
    		for(int i=0; i<NUM_MESI; i++) ore += mesi[i].getOre();
    		return ore;
    	}
    	
    	
    	public static void main(String[] args) {
    		// istanzio un oggetto di tipo Anno
    		Anno anno = new Anno();
    		
    		System.out.println("In un anno ci sono "+anno.getOre()+" ore.");
    	}
    
    
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    3
    Ciao
    Partendo dal costruttore Giorno: istanziare dovrebbe voler dire "creazione fisica della classe" ma non si istanzia una classe con un oggetto?
    Il metodo getOre è dichiarato per permettere poi di essere chiamato ed utilizzato per effettuare la somma nella classe Mese potendo quindi usare il suo valore 24?

    L'array nella classe Mese: quindi dichiarando Giorno[] giorni; dico che giorni essendo un oggetto di tipo Mese contiene o corrisponde a un insieme di oggetti di tipo Giorno..poi stando li a pensarci e cercare di capire singolarmente, per qualche istante ci riesco, poi tutto mi sfugge, è come se avessi la soluzione sulla punta della lingua..poi è inutile che proseguo, non ho le idee abbastanza chiare..i commenti ovviamente li capisco, ma nel complesso no..cosa mi consigli di fare?
    Scusa se ti faccio perdere tempo

  7. #7
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Quote Originariamente inviata da Mario83 Visualizza il messaggio
    Partendo dal costruttore Giorno: istanziare dovrebbe voler dire "creazione fisica della classe" ma non si istanzia una classe con un oggetto?
    Il costruttore vuoto potrei anche non metterlo: non fa alcuna azione particolare. Lo metto giusto per dare ad ogni classe il suo costruttore.

    Quote Originariamente inviata da Mario83 Visualizza il messaggio
    Il metodo getOre è dichiarato per permettere poi di essere chiamato ed utilizzato per effettuare la somma nella classe Mese potendo quindi usare il suo valore 24?
    Esatto: potrei anche non creare il metodo ma utilizzare direttamente 24. Però così è un po' più Object-Oriented: l'oggetto Giorno ha la sua costante.

    Quote Originariamente inviata da Mario83 Visualizza il messaggio
    L'array nella classe Mese: quindi dichiarando Giorno[] giorni; dico che giorni essendo un oggetto di tipo Mese contiene o corrisponde a un insieme di oggetti di tipo Giorno
    No calma. giorni non è un oggetto di tipo Mese! Con quel Giorno[] giorni dico che un oggetto di tipo Mese conterrà un array di Giorni. Ad esempio potresti aggiungere un campo
    codice:
    String nomeMese;
    o altro, ma la caratteristica fondamentale di un Mese è quella di essere composto da Giorni.

    Quote Originariamente inviata da Mario83 Visualizza il messaggio
    cosa mi consigli di fare?
    La risposta è piuttosto scontata: studiare su un libro/tutorial/quello-che-vuoi e seguire passo passo gli esempi. So che già lo stai facendo, quindi... continua e non mollare!


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.