Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    [java] Esercizio con OGGETTI BUILDER

    Ragazzi ho un problema con questo esercizio...spero possiate aiutarmi.

    Si definisca una classe Java denominata SetOfNumbers che implementi l'interfaccia Set071210. La classe rappresenta un insieme ordinato di (non più di 50) numeri interi(utilizzare l'array per l'implementazione dell'insieme). L'ordinamento dell'insieme dovrà essere effettuato mediante l'algoritmo Quicksort semiiterativo(contenente una singola chiamata ricorsiva). La classe dovrà essere immutabile, per cui una volta inseriti gli elementi e ordinato l'insieme, quest'ultimo non potrà più essere modificato(utilizzare un oggetto builder a tale scopo).
    In seguiti si realizza un programma Java che prenda in input una sequenza di numer interi e costruisca l'insieme contenente tali numeri. Il programma dovrà stampare in ouput la media dei valori contenuti nell'insieme.

    File di input e di output
    Il file di input è formato da due righe. La prima riga contiene il numero di elementi dell'insieme, mentre la seconda riga contiene la sequenza di numeri interi separati da uno spazio. Il file di output contiene la media degli elementi in input.


    codice:
    import java.io.*;
    import java.util.*;
    import java.math.*;
    
    interface Set071210
    {
    	public BigDecimal getSize();
    	public BigDecimal getMean();
    	public BigDecimal[]getSet;
    }

    Non capisco se l'oggetto builder lo devo inserire nella classe SetOfNumbers o creare una classe a parte?
    Vi prego aiutatemiiiiiiiiiiiiiiii

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    partiamo da cosa intende il tuo prof per oggetto builder??

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da sicula83
    La classe dovrà essere immutabile, per cui una volta inseriti gli elementi e ordinato l'insieme, quest'ultimo non potrà più essere modificato(utilizzare un oggetto builder a tale scopo).
    Originariamente inviato da valia
    partiamo da cosa intende il tuo prof per oggetto builder??
    Per quello che posso dedurre dal testo, si dovrebbe intendere il design pattern "builder" o perlomeno anche solo una sua "variante".

    E una variante semplice/tipica per inizializzare oggetti "immutabili" in genere prevede di definire una nested class all'interno della classe di questi oggetti.

    Scenario tipico: una classe per oggetti immutabili che ha molte proprietà di cui spesso solo alcune devono essere inizializzate. Invece di avere tonnellate di costruttori leggermente differenti ognuno con un parametro in più (sono detti "costruttori telescopici"), si usa una nested class che fa da builder. E in genere i metodi del builder permettono di sfruttare il "method chaining".

    Esempio: classe Persona "immutabile".

    codice:
    Persona p1 = new Persona.Builder().nome("Mario").cognome("Rossi").eta(25).build();
    
    Persona p2 = new Persona.Builder().nome("Giacomo").cognome("Verdi").figli(3).codiceFiscale("xxxx").build();
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da andbin
    Per quello che posso dedurre dal testo, si dovrebbe intendere il design pattern "builder" o perlomeno anche solo una sua "variante".
    infatti, ho pensato pure io ad un'implementazione del pattern builder, volevo conferma.
    Diciamo che questa più che una domanda da forum è una domanda da "ricevimento" oppure domanda "delucidazione" del testo.
    Se poi si è bypassato la teoria allora mi pare difficile comprendere cosa intende il prof per builder

  6. #6
    andbin si, il mio Prof intende proprio la variante del builder pattern. Valia ti assicuro che non ho assolutamente bypassato la teoria...ma lasciamo perdere le polemiche sterili.

    Andbin stamattina ho provato a svolgere l'esercizio, nei primi 3 punti e cioé:implementazione della classe SetOfNumbers,immutabilità della classe e implementazione dell'oggetto builder...ecco qui il mio codice
    codice:
    import java.io.*;
    import java.util.*;
    import java.math.*;
    
    interface Set071210
    {
    	public BigDecimal getSize();
    	public BigDecimal getMean();
    	public BigDecimal[]getSet();
    }
    
    class SetOfNumbers implements Set071210
    {
    	private final BigDecimal size;
    	private final BigDecimal [] set;
    	private final BigDecimal media;
    	private final BigDecimal somma;
    	
    	/**public SetOfNumber(BigDecimal size,BigDecimal [] set)
    	{
    		this.size=new BigDecimal(size.toString());
    		this.set=new BigDecimal(set.toString());
    		somma=0.0;
    		for(int i=0;i<set.length-1;i++)
    		{
    			somma=somma+set[i];
    			media=somma.divide(size,UNNECESSARY);
    		}
    	}
    	*/
    	public static class Builder 
    	{
    		//parametri richiesti
    		private final BigDecimal size;
    		private final BigDecimal [] set;
    		
    		//parametri opzionali
    		private final BigDecimal media=0.0;
    		private final BigDecimal somma=0.0;
    		
    		public Builder(BigDecimal size, BigDecimal [] set)
    		{
    			this.size=new BigDecimal(size.toString());
    			this.set=new BigDecimal(set.toString());
    			
    			for(int i=0;i<set.length-1;i++)
    		    {
    			somma=somma+set[i];
    			media=somma.divide(size,1);
    		      }
    		}
    		
    		public BigDecimal getSize()
    		{
    			return size;
    		}
    		
    		public BigDecimal getMean()
    		{
    			return media;
    		}
    		
    		public BigDecimal [] getSet()
    		{
    			return set;
    		}
    		
    		public SetOfNumbers build()
    		{
    			return new SetOfNumbers(this);
    		}
    	}
    	
    	private SetOfNumbers(Builder builder)
    	{
    		size=builder.size;
    		set=builder.set;
    		media=builder.media;
    		somma=builder.somma;
    	}
    }

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da sicula83
    andbin si, il mio Prof intende proprio quello. Valia ti assicuro che non ho assolutamente bypassato la teoria...ma lasciamo perdere le polemiche sterili.
    ma te la sei sentita non so per quale motivo, non volevo offenderti né fare polemiche.
    In genere per gli esercizi non si dà niente di più di quanto si è spiegato ed è prassi (e te lo dico per esperienza) non aprire il libro e tentare di svolgere l'esercizio.

    Il fatto che non sai dove mettere il builder porta a due conclusioni:
    1. effettivamente la spiegazione del tuo prof è stata poco chiara (e andbin ha risolto il dubbio)
    2. hai bypassato i libri e non ti raccapezzi.

    Ora toglimi una curiosità: funziona o no come lo hai scritto?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da sicula83
    ho provato a svolgere l'esercizio, nei primi 3 punti e cioé:implementazione della classe SetOfNumbers,immutabilità della classe e implementazione dell'oggetto builder...ecco qui il mio codice
    Pensa: se per ottenere alla fin fine un oggetto SetOfNumbers l'unica cosa che fai con il Builder (oltre ad invocare build()) è passare qualcosa in "blocco" al suo costruttore ..... allora perché non avresti potuto, tecnicamente, passare tutto già ad un costruttore di SetOfNumbers?

    Cioè, detto in altro modo, il Builder così come è non servirebbe a nulla .....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Originariamente inviato da valia
    ma te la sei sentita non so per quale motivo, non volevo offenderti né fare polemiche.
    In genere per gli esercizi non si dà niente di più di quanto si è spiegato ed è prassi (e te lo dico per esperienza) non aprire il libro e tentare di svolgere l'esercizio.

    Il fatto che non sai dove mettere il builder porta a due conclusioni:
    1. effettivamente la spiegazione del tuo prof è stata poco chiara (e andbin ha risolto il dubbio)
    2. hai bypassato i libri e non ti raccapezzi.

    Ora toglimi una curiosità: funziona o no come lo hai scritto?
    Scusami tu valia e che con questa materia sto impazzendo dato che abbiamo problemi con il Prof...si va al ricevimento ed invece di spiegare il tuo dubbio ti dice:"e vabbè è facile, che ci vuole, pensaci bene."Sapevo che si mettesse dentro un'altra classe ma avevo il dubbio di come sviluppare il tutto. :-(
    Grazie andbin, hai proprio ragione...così non ha molto senso:-) sistemo tutto e riposto.

  10. #10
    Risistemato
    codice:
    import java.io.*;
    import java.util.*;
    import java.math.*;
    
    interface Set071210
    {
    	public BigDecimal getSize();
    	public BigDecimal getMean();
    	public BigDecimal[]getSet();
    }
    
    class SetOfNumbers implements Set071210
    {
    	private final BigDecimal size;
    	private final BigDecimal [] set;
    	private final BigDecimal media;
    	private final BigDecimal somma;
    	
    	public static class Builder 
    	{
    		//parametri richiesti
    		private  BigDecimal size;
    		private  BigDecimal [] set;
    		
    		//parametri opzionali
    		private  BigDecimal media=new BigDecimal(0.0);
    		private  BigDecimal somma=new BigDecimal(0.0);
    		
    		public Builder(BigDecimal size, BigDecimal [] set)
    		{
    			this.size=new BigDecimal(size.toString()); 
    			for(int i=0;i<set.length-1;i++)
    			this.set=new BigDecimal(set[i].toString());
    		}
    		
    		//i due metodi successivi li lascio ma non servono a nulla
    		public Builder setMedia(BigDecimal val)
    		{
    			media=val;
    			return this;
    		}
    		
    		public Builder setSomma(BigDecimal val)
    		{
    			somma=val;
    			return this;
    		}
    		
    		
    		public SetOfNumbers build()
    		{
    			return new SetOfNumbers(this);
    		}
    	}
    			
    		
    	
    	private SetOfNumbers(Builder builder)
    	{
    		size=builder.size;
    		set=builder.set;
    		media=builder.media;
    		somma=builder.somma;
    		
    		for(int i=0;i<set.length-1;i++)
    		    {
    			somma=somma.add(set[i]);
    		    }
    		    
    		    media=somma.divide(size,1);
    
    	}
    		
    		public BigDecimal getSize()
    		{
    			return new BigDecimal(size.toString());
    		}
    		
    		public BigDecimal getMean()
    		{
    			return new BigDecimal(media.toString());
    		}
    		
    		public BigDecimal [] getSet()
    		{
    			for(int i=0;i<set.length;i++)
    			return new BigDecimal (set[i].toString());
    		}
    		
    	}
    Credo sia corretto però ho problemi con i BigDecimal.Al momento di compilarlo ho questo errore:
    codice:
    Esame.java:37: incompatible types
    found   : java.math.BigDecimal
    required: java.math.BigDecimal[]
    			this.set=new BigDecimal(set[i].toString());
    			         ^
    Esame.java:91: incompatible types
    found   : java.math.BigDecimal
    required: java.math.BigDecimal[]
    			return new BigDecimal (set[i].toString());
    Come sistemarlo?non ho molta dimestichezza con i BigDecimal. Grazie a tutti.

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.