Newsgroup: it.comp.java
Titolo: La vera staticità

   import java.lang.*;
Sto cercando di creare una tavola di coseni che rimanga fissa in memoria e
venga calocolata solo una volta.
Ho tentato di realizzarla in questo modo .. ma ho il sospetto che non
fuzioni molto bene
   public  class CosTable
   {
      private static double[] Table = new double[360];
      public CosTable ()
      {
         for (int i= 0; i < 360; i++)
            Table[i] = Math.cos ((Math.PI/180)*i);
      }
      public static double getCos (int i)
      {
         return Table[i];
      }
   }
In questo modo posso aspettarmi due cose nel momento in cui chiamo la
funzione statica
1 un errore a runtime perchè il costruttore non è mai stato chiamato o uno
zero costante
2 la tavola viene creata e ricalcolata tutte le volte prima di essere
utilizzata, e quindi non ho raggiunto il mio scopo.
Nel caso del valore di PI non penso che i programmatori SUN si siano messi
ad inserire tutte le cifre manualmente, ma dovrebbe esserci un algoritmo che
viene chiamato la prima volta e calcola il numero... dopo di che lo mantiene
in memoria ... come diavolo si fa a fare lo stesso lavoro con seni e
coseni??
--
My home page: 
http://www.fortunecity.it/olimpico/pallavolo/6/index.html
Mirror: 
http://space.tin.it/computer/sibuzzi/
Standard mail: 
bul...@hotmail.com
Fast mail (for little mail only) : 
bul...@wappi.com
Icq number :: 14165006

 modo .. ma ho il sospetto che non fuzioni molto bene
prova con:
 
    public  class CosTable
    {
       private static double[] TABLE;
       static {    // inizializzazione delle variabili statiche.
	 TABLE = new double[360];
         for (int i = 0; i < TABLE.length; i++)
           TABLE[i] = Math.cos( (Math.PI/180) * i );
       }
       public static double getCos( int i ) { return TABLE[i]; }
       // . . .
    }
-- 
Ciao, Matteo                        !! Memories flashin' through my head
                                    /\ Was I just born or am I dead?
mailto:
matteo.mattia
 (at) 
libero.it
 \/              -- The Morning After
                                    　                   Faith No More

 ...
Una semplice soluzione può essere la seguente:
// --- inizio file CosTable.java ---
 public  class CosTable {
      private static double[] Table = new double[360];
      static{
         for (int i= 0; i < 360; i++)
            Table[i] = Math.cos ((Math.PI/180)*i);
      }
      public static double getCos (int i) {    return Table[i]; }
     // per prova
     public static void main(String[] s){
      System.out.println(" cos(15) = "+getCos(15));
     }
   }
// --- fine file CosTable.java ---
Ciao
  Massimo 
--
Ma! chi ha reso la mia lingua così perfida da averle  fatto guidare e salvaguardare fino ad ora la mia pigrizia?
A.Rimbaud, "Una stagione all'inferno"

 fuzioni molto bene
Ho il sospetto che non funzioni affatto! In alternativa alle proposte gia'
fornite ti propongo:
   public  class CosTable2
    {
       private static double[] Table = makeCosTable();
       private static double[] makeCosTable() {
          double[] tab= new double[360];
          for (int i= 0; i < 360; i++)
             tab[i] = Math.cos ((Math.PI/180)*i);
          return tab;
       }
       public static double getCos (int i)
       {
          return Table[i];
       }
    }
--*PaN!*