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:19 (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? **
  
  
 Al momento della creazione di un project in Eclipse, nella seconda  Al momento della creazione di un project in Eclipse, nella seconda 
 schermata appare un'opzione "project layout": schermata appare un'opzione "project layout":
 +  
   * use project folder as root for sources and class files   * use project folder as root for sources and class files
   * create separate folders for sources and class files   * create separate folders for sources and class files
Linea 80: Linea 88:
 programma: programma:
  
-se si è scelto di usare directory separate per bin e src:+  se si è scelto di usare directory separate per bin e src:
     e si definisce il package "foo":     e si definisce il package "foo":
        current directory = [PATH]/workspace/projectname/bin        current directory = [PATH]/workspace/projectname/bin
Linea 87: Linea 95:
        current directory = [PATH]/workspace/projectname/bin        current directory = [PATH]/workspace/projectname/bin
        comando = java Foo        comando = java Foo
-con un'unica root directory per sorgenti e file .class:+  con un'unica root directory per sorgenti e file .class:
     e si definisce il package "foo":     e si definisce il package "foo":
        current directory = [PATH]/workspace/projectname/        current directory = [PATH]/workspace/projectname/
Linea 96: Linea 104:
  
 In tutti i casi (sia da Eclipse che da shell), se si vuole aprire un  In tutti i casi (sia da Eclipse che da shell), se si vuole aprire un 
-file usando un path relativo, ad es. tramite il comando 'FileInputStream  +file usando un path relativo, ad es. tramite il comando '''FileInputStream  
-in = new FileInputStream("pippo.txt");', bisogna che il file "pippo.txt" +in = new FileInputStream("pippo.txt");''', bisogna che il file ''"pippo.txt"'' 
 stia nella current directory. Per ottenere il nome della current  stia nella current directory. Per ottenere il nome della current 
 directory da Java, si può usare il comando: directory da Java, si può usare il comando:
-System.getProperty("user.dir");+''System.getProperty("user.dir");''
 --------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------
-4)Quali sono le convenzioni per i nomi in Java?+====== Java ======
  
--classi: prima lettera maiuscola +===== Convenzioni per i nomi in Java =====
-class Raster; +
-class ImageSprite;+
  
--interfacce: prima lettere maiuscola 
-interface RasterDelegate; 
-interface Storing; 
  
--metodi: prima lettera minuscola +  * classi: prima lettera maiuscola 
-run(); +    <code> 
-runFast()+    class Raster
-getBackground();+    class ImageSprite</code>
  
--variabili: prima lettera minuscola +  * interfacce: prima lettere maiuscola 
-int i; +    <code> 
-char c; +    interface RasterDelegate; 
-float myWidth;+    interface Storing;</code> 
 + 
 +  * metodi: prima lettera minuscola 
 +    <code> 
 +    run(); 
 +    runFast(); 
 +    getBackground();</code> 
 + 
 +  * variabili: prima lettera minuscola 
 +    <code> 
 +    int i; 
 +    char c; 
 +    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 126: 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.1253801984.txt.gz · Ultima modifica: 24/09/2009 alle 14:19 (16 anni fa) da Andrea Corradini

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki