Strumenti Utente

Strumenti Sito


lpr-b:lpr-b-09:faq

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
lpr-b:lpr-b-09:faq [24/09/2009 alle 14:23 (16 anni fa)] Andrea Corradinilpr-b:lpr-b-09:faq [20/10/2009 alle 15:23 (16 anni fa)] (versione attuale) Andrea Corradini
Linea 1: Linea 1:
 +
 +
 ====== FAQ (Frequently Asked Questions) ====== ====== FAQ (Frequently Asked Questions) ======
  
 [[start|Torna alla pagina principale di LPR-B-09]] [[start|Torna alla pagina principale di LPR-B-09]]
  
-===== Domande su esercitazioni in laboratorio =====+====== Eclipse ====== 
 + 
 +===== Parametri di linea di comando in Eclipse =====
    
-==== Come si settano i parametri d'avvio di Java su Eclipse (i "command line arguments")? ====+** Come si settano i parametri d'avvio di Java su Eclipse (i "command line arguments")? **
  
 Supponendo di avere una classe: Supponendo di avere una classe:
Linea 43: Linea 47:
 ----------------------------------------------------------------- -----------------------------------------------------------------
  
-==== Come fare per avviare Eclipse se all'avvio segnala "workspace in uso"? ====+===== Problemi con avvio di Eclipse ===== 
 + 
 +** Come fare per avviare Eclipse se all'avvio segnala "workspace in uso"? **
  
  
 A causa di una chiusura errata di Eclipse (ad es., tramite il comando  A causa di una chiusura errata di Eclipse (ad es., tramite il comando 
 ''"kill"'') può succedere che all'avvio mostri questo messaggio. Per  ''"kill"'') può succedere che all'avvio mostri questo messaggio. Per 
-sbloccarlo è necessario rimuovere il file .lock che si trova nella  +sbloccarlo è necessario rimuovere il file ''.lock'' che si trova nella  
-directory .metadata del workspace. Ad es.:+directory ''.metadata'' del workspace. Ad es.:
  
 <code>->  rm [PATH]/workspace/.metadata/.lock</code> <code>->  rm [PATH]/workspace/.metadata/.lock</code>
 ---------------------------------------------------------------------------------- ----------------------------------------------------------------------------------
  
-==== Dove stanno i file .java e .class in un progetto creato con Eclipse e come si avvia da shell un programma creato tramite Eclipse? ====+===== File .java e .class in Eclipse ===== 
 + 
 +** Dove stanno i file .java e .class in un progetto creato con Eclipse e come si avvia da shell un programma creato tramite Eclipse? **
  
  
Linea 102: Linea 110:
 ''System.getProperty("user.dir");'' ''System.getProperty("user.dir");''
 --------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------
 +====== Java ======
  
-==== Quali sono le convenzioni per i nomi in Java====+===== Convenzioni per i nomi in Java =====
  
  
Linea 109: Linea 118:
     <code>     <code>
     class Raster;     class Raster;
-    class ImageSprite; +    class ImageSprite; </code>
-    </code>+
  
   * interfacce: prima lettere maiuscola   * interfacce: prima lettere maiuscola
 +    <code>
     interface RasterDelegate;     interface RasterDelegate;
-    interface Storing;+    interface Storing;</code>
  
   * metodi: prima lettera minuscola   * metodi: prima lettera minuscola
 +    <code>
     run();     run();
     runFast();     runFast();
-    getBackground();+    getBackground();</code>
  
   * variabili: prima lettera minuscola   * variabili: prima lettera minuscola
 +    <code>
     int i;     int i;
     char c;     char c;
-    float myWidth;+    float myWidth;</code>
  
 Per i nomi di classi, interfacce, metodi e variabili si usa la notazione  Per i nomi di classi, interfacce, metodi e variabili si usa la notazione 
Linea 130: Linea 141:
 al nome deve essere maiuscola. al nome deve essere maiuscola.
  
-  * costanti: tutte maiuscole, con parole interne separate dal simbolo  +  * costanti: tutte maiuscole, con parole interne separate dal simbolo underscore "_" 
-underscore "_" +    <code> 
-static final int MIN_WIDTH = 4; +    static final int MIN_WIDTH = 4; 
-static final int MAX_WIDTH = 999; +    static final int MAX_WIDTH = 999; 
-static final int GET_THE_CPU = 1;+    static final int GET_THE_CPU = 1;</code>
  
--package: nomi minuscoli +  * package: nomi minuscoli 
-com.sun.eng +    <code> 
-com.apple.quicktime.v2 +    com.sun.eng 
-edu.cmu.cs.bovik.cheese+    com.apple.quicktime.v2 
 +    edu.cmu.cs.bovik.cheese</code>
  
 Vedere anche: http://java.sun.com/docs/codeconv/ Vedere anche: http://java.sun.com/docs/codeconv/
 +
 +===== Conversione dei parametri del main =====
 +
 +** Come convertire i parametri del main (stringhe) in interi/double? **
 +
 +Supponiamo che il programma si aspetti due parametri, un intero e un 
 +double. In questo caso, si può fare così:
 +
 +<code>
 +int myInt = Integer.parseInt(args[0]);
 +double myDouble = Double.parseDouble(args[1]);
 +</code>
 +
 +Può convenire mettere queste istruzioni all'interno di un ''try/catch'', per 
 +catturare eventuali eccezioni che sono dovute, ad esempio, a mancanza di 
 +input (''ArrayIndexOutOfBoundsException'') o errore di conversione 
 +(''NumberFormatException''), in maniera tale da settare comunque valori di 
 +default per le variabili ''myInt'' e ''myDouble'', oppure per ritornare un 
 +messaggio di errore all'utente.
 +
 +===== Generazione di numeri random ====
 +
 +Si può usare la classe ''java.util.Random'' in questa maniera:
 +
 +<code>
 +int MAX_VALUE = 100;
 +Random randomGenerator = new Random();
 +// oppure: new Random(System.currentTimeMillis());
 +int randomInt = randomGenerator.nextInt(MAX_VALUE);</code>
 +
 +**Attenzione**: il metodo ''nextInt(int n)'' ritorna un numero compreso tra 0 e 
 +''n-1'' (nell'esempio, tra 0 e 99), per cui se si vogliono generare dei 
 +numeri compresi tra 1 e ''n'', si deve sommare 1 al valore ritornato.
 +
 +In alternativa si può usare il metodo statico ''Math.random()'', che ritorna 
 +un ''double'' in [0, 1), in questa maniera:
 +
 +<code>int randomInt = (int) (Math.random() * MAX_VALUE);</code>
 +
 +(anche in questo caso, ''randomInt'' sarà compreso tra 0 e 99).
 +
 +**Attenzione**: il seguente modo per generare un numero random è sbagliato:
 +
 +<code>int randomInt = (int) Math.random() * MAX_VALUE; //sbagliato!!!</code>
 +
 +Infatti, dato che l'operatore di cast ha precedenza rispetto a 
 +l'operatore di moltiplicazione, il numero ritornato da ''Math.Random()'' 
 +viene convertito a 0 e quindi il risultato della moltiplicazione è 0.
 +
 +
 +====== Callable ======
 +
 +===== Eccezioni lanciate da call() =====
 +
 +** Come si può gestire l'eventuale eccezione lanciata dal metodo ''call()''? **
 +
 +A differenza del metodo ''run()'' di ''Runnable'', il metodo ''call()'' di ''Callable'' può
 +lanciare una qualunque eccezione, anche controllata. L'eccezione eventualmente lanciata viene
 +incapsulata in una eccezione di tipo ''ExecutionException'' che viene lanciata quando si 
 +esegue il metodo ''get()'' del ''FutureTask'' per ottenere il risultato di ''call()''.
 +L'eccezione originale può essere ottenuta invocando il metodo ''getCause()'' sulla
 +''ExecutionException'' lanciata da ''get()''.
 +
 +===== Quando termina una ''call()''... =====
 +
 +** Come si può essere avvisati quando termina una ''call()'' senza fare una ''get()'' bloccante? **
 +
 +Come descritto nella API di ''FutureTask'', quando un ''FutureTask'' passa nello stato ''isDone'' perchè
 +la ''call()'' termina l'esecuzione, viene eseguito il metodo (protected, void) ''done()'', che 
 +non fa niente. Questo metodo può essere sovrascritto in una sottoclasse in modo da notificare 
 +la terminazione a un altro thread in attesa dl risultato.
 +
  
lpr-b/lpr-b-09/faq.1253802224.txt.gz · Ultima modifica: 24/09/2009 alle 14:23 (16 anni fa) da Andrea Corradini

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki