<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="it">
	<id>https://wiki.dsy.it/index.php?action=history&amp;feed=atom&amp;title=Programmazione%2FProgetti%2FArchitettura3D%2FStesura_III</id>
	<title>Programmazione/Progetti/Architettura3D/Stesura III - Cronologia</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.dsy.it/index.php?action=history&amp;feed=atom&amp;title=Programmazione%2FProgetti%2FArchitettura3D%2FStesura_III"/>
	<link rel="alternate" type="text/html" href="https://wiki.dsy.it/index.php?title=Programmazione/Progetti/Architettura3D/Stesura_III&amp;action=history"/>
	<updated>2026-05-09T17:37:38Z</updated>
	<subtitle>Cronologia della pagina su questo sito</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>https://wiki.dsy.it/index.php?title=Programmazione/Progetti/Architettura3D/Stesura_III&amp;diff=11710&amp;oldid=prev</id>
		<title>Yoruno il 09:15, 3 feb 2006</title>
		<link rel="alternate" type="text/html" href="https://wiki.dsy.it/index.php?title=Programmazione/Progetti/Architettura3D/Stesura_III&amp;diff=11710&amp;oldid=prev"/>
		<updated>2006-02-03T09:15:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nuova pagina&lt;/b&gt;&lt;/p&gt;&lt;div&gt;   //ROYV&lt;br /&gt;
   &lt;br /&gt;
   import java.util.Hashtable;&lt;br /&gt;
   &lt;br /&gt;
   // CLASSI di Figura3D ////////////////////////////////////////////////////////&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
   class Cilindro extends Figura3D {&lt;br /&gt;
   &lt;br /&gt;
     private double r, h;&lt;br /&gt;
   &lt;br /&gt;
     public Cilindro(double r, double h) {&lt;br /&gt;
   &lt;br /&gt;
       if (r &amp;lt;= 0 || h &amp;lt;= 0)&lt;br /&gt;
         throw new Figura3DException(this.getClass().getName() +  &amp;quot;: Parametro errato!&amp;quot;);&lt;br /&gt;
       else {&lt;br /&gt;
         this.r = r;&lt;br /&gt;
         this.h = h;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public void setParametri(double[] param) {&lt;br /&gt;
   &lt;br /&gt;
       if (param == null || param.length &amp;lt; 2 || (param[0] &amp;lt;= 0 || param[1] &amp;lt;= 0))&lt;br /&gt;
         throw new Figura3DException(this.getClass().getName() +  &amp;quot;: Parametro errato!&amp;quot;);&lt;br /&gt;
       else {&lt;br /&gt;
         this.r = param[0];&lt;br /&gt;
         this.h = param[1];&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public double[] getParametri() {&lt;br /&gt;
       return new double[] {r, h};&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public double getVolume() {&lt;br /&gt;
       return Math.PI * r * r * h;&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public double getSuperficie() {&lt;br /&gt;
       return 2 * Math.PI * r * h;&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public boolean equals(Object o) {&lt;br /&gt;
       /* Confronto l' istanza attuale con l' istanza dell' oggeto.&lt;br /&gt;
          Permettendo un confronto più specifico, nel caso il metodo venga utilizzato&lt;br /&gt;
          da un eventuale sottoclasse.&lt;br /&gt;
        */&lt;br /&gt;
       //return (o instanceof Cilindro) ? equals((Cilindro)o) : false;&lt;br /&gt;
       return (this.getClass().isInstance(o))? equals((Cilindro)o) : false;&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public boolean equals(Cilindro c) {&lt;br /&gt;
       //test sui parametri dimensionali.&lt;br /&gt;
       return this.r == c.r &amp;amp;&amp;amp; this.h == c.h;&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public String toString() {&lt;br /&gt;
       return this.getClass().getName() + &amp;quot;: raggio = &amp;quot; + r + &amp;quot;, altezza = &amp;quot; + h;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
   class Sfera extends Cilindro {&lt;br /&gt;
   &lt;br /&gt;
     public Sfera(double r) {&lt;br /&gt;
       super(r, r);&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public void setParametri(double[] param) {&lt;br /&gt;
   &lt;br /&gt;
       if (param == null || param.length &amp;lt; 1)&lt;br /&gt;
         throw new Figura3DException(this.getClass().getName() +  &amp;quot;: Parametro errato!&amp;quot;);&lt;br /&gt;
       else&lt;br /&gt;
         //crea una lista di due elementi costituiti dallo stesso valore.&lt;br /&gt;
         super.setParametri(new double[] {param[0], param[0]});&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public double[] getParametri() {&lt;br /&gt;
       return new double[] {super.getParametri()[0]};&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public double getVolume() {&lt;br /&gt;
       //divisione tra valori double, 4/3 * volume del Cilindro.&lt;br /&gt;
       return (4 * super.getVolume()) / 3;&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public double getSuperficie() {&lt;br /&gt;
       // 2 * (2PIhr)&lt;br /&gt;
       return 2 * super.getSuperficie();&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public String toString() {&lt;br /&gt;
       return this.getClass().getName() + &amp;quot;: raggio = &amp;quot; + getParametri()[0];&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   class Parallelepipedo extends Figura3D {&lt;br /&gt;
   &lt;br /&gt;
     private double a, b, h;&lt;br /&gt;
   &lt;br /&gt;
     public Parallelepipedo(double a, double b, double h) {&lt;br /&gt;
   &lt;br /&gt;
       if (a &amp;lt;= 0 || b &amp;lt;= 0 || h &amp;lt;= 0)&lt;br /&gt;
         throw new Figura3DException(this.getClass().getName() + &amp;quot;: Parametro errato!&amp;quot;);&lt;br /&gt;
       else {&lt;br /&gt;
         this.a = a;&lt;br /&gt;
         this.b = b;&lt;br /&gt;
         this.h = h;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public void setParametri(double[] param) {&lt;br /&gt;
   &lt;br /&gt;
       if (param == null || param.length &amp;lt; 3 || (param[0] &amp;lt;= 0 || param[1] &amp;lt;= 0 || param[2] &amp;lt;= 0))&lt;br /&gt;
         throw new Figura3DException(this.getClass().getName() + &amp;quot;Parametri non validi&amp;quot;);&lt;br /&gt;
       else {&lt;br /&gt;
         this.a = param[0];&lt;br /&gt;
         this.b = param[1];&lt;br /&gt;
         this.h = param[2];&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public double[] getParametri() {&lt;br /&gt;
       return new double[] {a, b, h};&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public double getVolume() {&lt;br /&gt;
       return a * b * h;&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public double getSuperficie() {&lt;br /&gt;
       return 2 * (h * (a + b) + a * b);&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public boolean equals(Object o) {&lt;br /&gt;
       //stessa logica applicato sul metodo del Cilindro.&lt;br /&gt;
       return (this.getClass().isInstance(o))? equals((Parallelepipedo)o) : false;&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public boolean equals(Parallelepipedo p) {&lt;br /&gt;
       return this.a == p.a &amp;amp;&amp;amp; this.b == p.b &amp;amp;&amp;amp; this.h == p.h;&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public String toString() {&lt;br /&gt;
       return this.getClass().getName() + &amp;quot;: latoA = &amp;quot; + a + &amp;quot;, latoB = &amp;quot; + b + &amp;quot;, altezza = &amp;quot; + h;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
   class Cubo extends Parallelepipedo {&lt;br /&gt;
   &lt;br /&gt;
     public Cubo(double l) {&lt;br /&gt;
       super(l, l, l);&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public void setParametri(double[] param) {&lt;br /&gt;
   &lt;br /&gt;
       if (param == null || param.length &amp;lt; 1)&lt;br /&gt;
         throw new Figura3DException(this.getClass().getName() + &amp;quot;: Parametro errato!&amp;quot;);&lt;br /&gt;
       else&lt;br /&gt;
         super.setParametri(new double[] {param[0], param[0], param[0]});&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public double[] getParametri() {&lt;br /&gt;
       return new double[] {super.getParametri()[0]} ;&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public String toString() {&lt;br /&gt;
       //lato -&amp;gt; raggio per confronto con i file di prova&lt;br /&gt;
       return this.getClass().getName() + &amp;quot;: raggio = &amp;quot; + super.getParametri()[0];&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
   class TroncoDiCono extends Figura3D {&lt;br /&gt;
   &lt;br /&gt;
     private double rh, rs, h;&lt;br /&gt;
   &lt;br /&gt;
     public TroncoDiCono(double rh, double rs, double h) {&lt;br /&gt;
   &lt;br /&gt;
       if (rh &amp;lt;= 0 || rs &amp;lt; 0 || h &amp;lt;= 0)&lt;br /&gt;
         throw new Figura3DException(this.getClass().getName() + &amp;quot;: Parametro errato!&amp;quot;);&lt;br /&gt;
       else {&lt;br /&gt;
         this.rh = rh;&lt;br /&gt;
         this.rs = rs;&lt;br /&gt;
         this.h = h;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public void setParametri(double[] param) {&lt;br /&gt;
   &lt;br /&gt;
       if (param == null || param.length &amp;lt; 3 || (param[0] &amp;lt;= 0 || param[1] &amp;lt; 0 || param[2] &amp;lt;= 0))&lt;br /&gt;
         throw new Figura3DException(this.getClass().getName() + &amp;quot;Parametri non validi&amp;quot;);&lt;br /&gt;
       else {&lt;br /&gt;
         this.rh = param[0];&lt;br /&gt;
         this.rs = param[1];&lt;br /&gt;
         this.h = param[2];&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public double[] getParametri() {&lt;br /&gt;
       return new double[] {rh, rs, h};&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public double getVolume() {&lt;br /&gt;
       return Math.PI / 3 * (rh * rs + rh * rh + rs * rs) * h;&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public double getSuperficie() {&lt;br /&gt;
       return Math.PI * (rh + rs) * Math.sqrt((rh - rs) * (rh - rs) + h * h);&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public boolean equals(Object o) {&lt;br /&gt;
       //return (o instanceof TroncoDiCono) ? equals( (TroncoDiCono) o) : false;&lt;br /&gt;
       return (this.getClass().isInstance(o))? equals((TroncoDiCono)o) : false;&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public boolean equals(TroncoDiCono t) {&lt;br /&gt;
       return this.rh == t.rh &amp;amp;&amp;amp; this.rs == t.rs &amp;amp;&amp;amp; this.h == t.h;&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public String toString() {&lt;br /&gt;
       //return this.getClass().getName() +  &amp;quot;: raggio grande = &amp;quot; + rh + &amp;quot;, raggio piccolo = &amp;quot; + rs + &amp;quot;, altezza = &amp;quot; + h;&lt;br /&gt;
       return &amp;quot;Tronco di cono: raggio grande = &amp;quot; + rh + &amp;quot;, raggio piccolo = &amp;quot; + rs + &amp;quot;, altezza = &amp;quot; + h;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
   class Cono extends TroncoDiCono {&lt;br /&gt;
   &lt;br /&gt;
     public Cono(double r, double h) {&lt;br /&gt;
       super(r, 0, h);&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public void setParametri(double[] param) {&lt;br /&gt;
   &lt;br /&gt;
       if (param == null || param.length &amp;lt; 2)&lt;br /&gt;
         throw new Figura3DException(this.getClass().getName() + &amp;quot;: Parametro errato!&amp;quot;);&lt;br /&gt;
       else&lt;br /&gt;
         super.setParametri(new double[] {param[0], 0, param[1]});&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public double[] getParametri() {&lt;br /&gt;
       //utilizzo i parametri di TroncoDiCono Raggio Grande -&amp;gt; 0 e Altezza -&amp;gt; 2&lt;br /&gt;
       double[] p = super.getParametri();&lt;br /&gt;
       return new double[] {p[0], p[2]};&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public String toString() {&lt;br /&gt;
       double[] p = getParametri();&lt;br /&gt;
       return this.getClass().getName() + &amp;quot;: raggio = &amp;quot; + p[0] + &amp;quot;, altezza = &amp;quot; + p[1];&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   class Figura3DException extends RuntimeException {&lt;br /&gt;
     public Figura3DException(String msg) {&lt;br /&gt;
       super(msg);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   &lt;br /&gt;
   class TipoNonPrevistoException extends Exception {&lt;br /&gt;
     public TipoNonPrevistoException(String msg) {&lt;br /&gt;
       super(msg);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   /////////////////////////////////////////////////////////////////////&lt;br /&gt;
   &lt;br /&gt;
   class Architettura3D {&lt;br /&gt;
   &lt;br /&gt;
     private Hashtable paramList;&lt;br /&gt;
     private SequenzaFigure3D lista = null;&lt;br /&gt;
     //identifica il tipo + generico di figura.&lt;br /&gt;
     private static final String BASE_CLASS = &amp;quot;Figura3D&amp;quot;;&lt;br /&gt;
   &lt;br /&gt;
     public Architettura3D() {&lt;br /&gt;
       lista = new SequenzaFigure3D();&lt;br /&gt;
       inizializeParamList();&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public void addFigura3D(Figura3D figura) {&lt;br /&gt;
       lista.add(figura);&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public Figura3D[] getFigure3D() {&lt;br /&gt;
      return lista.toArray();&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public double getVolume(String tipoFigura) throws TipoNonPrevistoException {&lt;br /&gt;
       return lista.getSommaVolume(getBaseClass(tipoFigura));&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public double getSuperficie(String tipoFigura) throws TipoNonPrevistoException {&lt;br /&gt;
       return lista.getSommaSuperficie(getBaseClass(tipoFigura));&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public double getVolumeMedio() {&lt;br /&gt;
       return lista.getSommaVolume(BASE_CLASS) / lista.getSize();&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public double getSuperficieMedia() {&lt;br /&gt;
       return lista.getSommaSuperficie(BASE_CLASS) / lista.getSize();&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public Figura3D trova(Figura3D fig) {&lt;br /&gt;
      return lista.find(fig);&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     private String getBaseClass(String tipof)  throws TipoNonPrevistoException {&lt;br /&gt;
   &lt;br /&gt;
      String s;&lt;br /&gt;
      if (tipof == null)&lt;br /&gt;
        throw new TipoNonPrevistoException(&amp;quot;Nessun parametro passato!&amp;quot;);&lt;br /&gt;
      else if ((s =  (String)paramList.get(tipof)) == null)&lt;br /&gt;
        throw new TipoNonPrevistoException(&amp;quot;Il tipo &amp;quot; + tipof + &amp;quot; non è previsto!&amp;quot;);&lt;br /&gt;
      else&lt;br /&gt;
       return s;&lt;br /&gt;
   &lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     private void inizializeParamList() {&lt;br /&gt;
   &lt;br /&gt;
       paramList = new Hashtable();&lt;br /&gt;
   &lt;br /&gt;
       paramList.put(&amp;quot;SC&amp;quot;, &amp;quot;Cilindro&amp;quot;);&lt;br /&gt;
       paramList.put(&amp;quot;PC&amp;quot;, &amp;quot;Parallelepipedo&amp;quot;);&lt;br /&gt;
       paramList.put(&amp;quot;TC&amp;quot;, &amp;quot;TroncoDiCono&amp;quot;);&lt;br /&gt;
       paramList.put(&amp;quot;TUTTE&amp;quot;, BASE_CLASS);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   // LISTA CONCATENATA&lt;br /&gt;
   class SequenzaFigure3D {&lt;br /&gt;
   &lt;br /&gt;
     //puntatore al primo nodo inizio della lista.&lt;br /&gt;
     private NodoFigura inizio;&lt;br /&gt;
     //puntatore all' ultimo nodo inizio della lista.&lt;br /&gt;
     private NodoFigura fine;&lt;br /&gt;
     //contatore degli elementi della lista.&lt;br /&gt;
     private int nelem;&lt;br /&gt;
   &lt;br /&gt;
     public SequenzaFigure3D() {&lt;br /&gt;
       inizio = null;&lt;br /&gt;
       fine = null;&lt;br /&gt;
       nelem = 0;&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     private static class NodoFigura {&lt;br /&gt;
       Figura3D figura;&lt;br /&gt;
       NodoFigura pros;&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public void add(Figura3D f) {&lt;br /&gt;
   &lt;br /&gt;
       if (f == null)&lt;br /&gt;
         throw new SequenzaFigure3DException(&amp;quot;Parametro non valido!&amp;quot;);&lt;br /&gt;
       else {&lt;br /&gt;
         NodoFigura n = new NodoFigura();&lt;br /&gt;
         n.figura = f;&lt;br /&gt;
         n.pros = null;&lt;br /&gt;
   &lt;br /&gt;
         if (inizio == null)&lt;br /&gt;
           inizio = n;&lt;br /&gt;
         else&lt;br /&gt;
           fine.pros = n;&lt;br /&gt;
   &lt;br /&gt;
         fine = n;&lt;br /&gt;
         nelem++;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public boolean remove(Figura3D f) {&lt;br /&gt;
   &lt;br /&gt;
       if (f == null)&lt;br /&gt;
         throw new SequenzaFigure3DException(&amp;quot;Parametro non valido!&amp;quot;);&lt;br /&gt;
       else {&lt;br /&gt;
         NodoFigura p = inizio, q = null;&lt;br /&gt;
         //creazione del riferimento di sinistra e di destra della fig. da ricercare.&lt;br /&gt;
         while (p != null &amp;amp;&amp;amp; !f.equals(p.figura)) {&lt;br /&gt;
           q = p;&lt;br /&gt;
           p = p.pros;&lt;br /&gt;
         }&lt;br /&gt;
         //verifica della ricerca e gestione della posizione iniziale.&lt;br /&gt;
         if (p != null &amp;amp;&amp;amp; f.equals(p.figura)) {&lt;br /&gt;
           if (q == null)&lt;br /&gt;
             inizio = inizio.pros;&lt;br /&gt;
           else&lt;br /&gt;
             //eliminando l' unico riferimento l' oggetto verrà cancellato dal GC.&lt;br /&gt;
             q.pros = p.pros;&lt;br /&gt;
   &lt;br /&gt;
           nelem--;&lt;br /&gt;
           return true;&lt;br /&gt;
         }&lt;br /&gt;
         return false;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public Figura3D find(Figura3D f) {&lt;br /&gt;
   &lt;br /&gt;
       if (f == null)&lt;br /&gt;
         throw new SequenzaFigure3DException(&amp;quot;Parametro non valido!&amp;quot;);&lt;br /&gt;
       else {&lt;br /&gt;
         NodoFigura nf = inizio;&lt;br /&gt;
         //for(NodoFigura n = inizio.pros; n != null; n = n.pros)&lt;br /&gt;
         //controllo delle figure dall' inizio della sequenza.&lt;br /&gt;
         for (int i = 0; i &amp;lt; nelem; i++)&lt;br /&gt;
           if (nf != null &amp;amp;&amp;amp; f.equals(nf.figura))&lt;br /&gt;
             return nf.figura;&lt;br /&gt;
           else&lt;br /&gt;
             nf = nf.pros;&lt;br /&gt;
   &lt;br /&gt;
         return null;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public Figura3D[] toArray() {&lt;br /&gt;
   &lt;br /&gt;
       NodoFigura nf = inizio;&lt;br /&gt;
       Figura3D[] ls = new Figura3D[nelem];&lt;br /&gt;
       for(int i = 0; i &amp;lt; nelem; i++) {&lt;br /&gt;
         ls[i] = nf.figura;&lt;br /&gt;
         nf = nf.pros;&lt;br /&gt;
       }&lt;br /&gt;
       return ls;&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public boolean isEmpty() {&lt;br /&gt;
       return inizio == null;&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public int getSize() {&lt;br /&gt;
       return nelem;&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public double getSommaVolume(String tipoFigura) {&lt;br /&gt;
      return sommaDati(inizio, tipoFigura, 'V');&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public double getSommaSuperficie(String tipoFigura) {&lt;br /&gt;
       return sommaDati(inizio, tipoFigura, 'S');&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     private double sommaDati(NodoFigura n, String filter, char c) {&lt;br /&gt;
   &lt;br /&gt;
       /*&lt;br /&gt;
        metodo basato sulla ricorsione.&lt;br /&gt;
        caso base :&lt;br /&gt;
        - nessun riferimento al nodo.&lt;br /&gt;
        casi ricorsivi :&lt;br /&gt;
        - Controllo istanze per tipo figura e in caso la figura corrente non&lt;br /&gt;
          è della &amp;quot;categoria - filter&amp;quot; da utilizzare si rimanda al prossimo oggetto.&lt;br /&gt;
        - Calcolo della proprietà &amp;quot;metodo da eseguire&amp;quot; e somma del risultato con&lt;br /&gt;
          il calcolo applicato sulla prossima figura.&lt;br /&gt;
        */&lt;br /&gt;
   &lt;br /&gt;
       double d = 0;&lt;br /&gt;
   &lt;br /&gt;
       try {&lt;br /&gt;
   &lt;br /&gt;
         if (n == null)&lt;br /&gt;
           return 0;&lt;br /&gt;
         //controllo dinamico sui tipi delle istanze.&lt;br /&gt;
         else if (!Class.forName(filter).isInstance(n.figura))&lt;br /&gt;
           return sommaDati(n.pros, filter, c);&lt;br /&gt;
         else {&lt;br /&gt;
   &lt;br /&gt;
           switch (c) {&lt;br /&gt;
             case 'V':&lt;br /&gt;
               d = n.figura.getVolume();&lt;br /&gt;
               break;&lt;br /&gt;
             case 'S':&lt;br /&gt;
               d = n.figura.getSuperficie();&lt;br /&gt;
               break;&lt;br /&gt;
             default:&lt;br /&gt;
               break;&lt;br /&gt;
           }&lt;br /&gt;
   &lt;br /&gt;
           return d + sommaDati(n.pros, filter, c);&lt;br /&gt;
   &lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       //Gestione classe controllata.&lt;br /&gt;
       catch (ClassNotFoundException e) {&lt;br /&gt;
         throw new SequenzaFigure3DException(&amp;quot;Tipo classe &amp;quot; + filter + &amp;quot; non trovata&amp;quot;);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public String toString() {&lt;br /&gt;
       return this.toString(&amp;quot; &amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
   &lt;br /&gt;
     public String toString(String sep) {&lt;br /&gt;
       if (inizio == null)&lt;br /&gt;
         return &amp;quot;&amp;quot;;&lt;br /&gt;
       else {&lt;br /&gt;
         String s = inizio.figura.toString();&lt;br /&gt;
         for(NodoFigura n = inizio.pros; n != null; n = n.pros)&lt;br /&gt;
           s = s + sep + n.figura.toString();&lt;br /&gt;
   &lt;br /&gt;
         return s;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   class SequenzaFigure3DException extends RuntimeException {&lt;br /&gt;
     public SequenzaFigure3DException(String msg) {&lt;br /&gt;
       super(msg);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Progetti]]&lt;/div&gt;</summary>
		<author><name>Yoruno</name></author>
		
	</entry>
</feed>