Passa ai contenuti principali

Mini Guida a Java ME [Esempio 1]

Dopo aver letto la miniguida sempre disponibile in questo blog ecco un breve esempio che spero possa essere illuminante rispetto la costruzione di comandi e uso dell'interfaccia grafica dell'applicazione

Obiettivo dell'esempio: illustrare la costruzione di comandi nell'applicazione e l'uso dell'interfaccia utente.
Scopo dell'applicazione: creare una sorta di "intelligenza molto artificiale". L'applicazione risponderà in maniera casuale alle domande dell'utente.
Per costruire l'applicazione useremo un'array di stringhe per le risposte, useremo dalla classe java.util la classe Random() e useremo degli oggetti Command per gestire i comandi utente. Vediamo il codice commentato per farci un'idea.
/**
* AI.java midlet di prova
* @author Giuseppe Caliendo
* @version 1.2
*/
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import java.util.*;

//La classe che andiamo a scrivere implementerà CommandListener per poter interagire con l'utente
public class AI extends MIDlet implements CommandListener{
 
 //Command x = newCommand(String label, int commandType, int priorità )
 private Command okCommand = new Command("Ok",Command.OK,0); //comando OK
 private Command exitCommand = new Command("Esci",Command.EXIT,1); //comando Esci
 private Display display; //serve sempre questo oggetto per visualizzare qualcosa
 private Form form; //useremo dei contenitori form per il nostro scopo (grafica ad alto livello, no canvas)
 private Random rdm = new Random(); //per la casualità della risposta

 //Array delle risposte
 private static String[] risposte = {"No, tu volevi dire, che ore sono? le 7 meno un quarto", "La domanda è mal posta, puoi riformularla meglio?", "Tu come la vedi?", "AH AH! che domanda! bella questa!", "La risposta è dentro di te, e però è sbagliata!"};

 //Costruttore
 public AI(){
  display = Display.getDisplay(this);
 }

 /* Metodo startApp(): quello che farà l'applicazione quando si avvia. 
  * Quando nell'applicazione succederà un cambiamento di stato, 
  * cioè l'utente premerà un tasto, andremo a catturare l'evento
  */
 public void startApp() throws MIDletStateChangeException{
  form = new Form("AI v.1.2"); //creo un primo form con titolo 'AI v.1.2'
  form.addCommand(okCommand); //al form aggiungo il comando ok
  form.addCommand(exitCommand); //aggiungo il comando exit
  form.setCommandListener(this); //imposto su questo form l'ascoltatore degli eventi il CommandListener
  form.append(new StringItem(null,"Poni una domanda ad AI:")); //aggiungo una stringa al form
  form.append(new TextField("inserisci","",20,TextField.ANY)); //aggiungo un textfield per ricevere la domanda dell'utente
  display.setCurrent(form); //dico al display di visualizzare il form appena impostato
 }

 public void pauseApp(){}

 /* 
  * E' buona regola quando si distruggere l'applicazione 
  * cancellare tutti gli oggetti, non c'è un garbage 
  * collector efficiente con in java standard edition
  */
 public void destroyApp(boolean unconditional){
  okCommand = null;
  exitCommand = null;
  form = null;
  notifyDestroyed();
 }

 //gestiamo gli eventi e i comandi implementando il comando del CommandListener
 public void commandAction(Command c,Displayable d){
  if(c==okCommand) //se si preme ok imposto un nuovo form
  {
   form = new Form("AI ti risponde:");
   int tmp = Math.abs(rdm.nextInt())%risposte.length;
   form.append(new StringItem(null,risposte[tmp]));
   display.setCurrent(form); //passo alla visualizzazione del form appena creato
  }
  if(c==exitCommand) //se si preme esci ... esce!
  {
   destroyApp(true); 
  }
 }
} 

Post popolari in questo blog

Se excel non aggiorna le formule

Oggi in ufficio è capitata una richiesta particolare. In un documento excel dopo aver eseguito un copia-incolla di una formula non si aggiornavano i risultati nelle celle interessate. Dopo attimi di perplessità dal fondo dell'ufficio il capo ci illumina con una funzione ai più sconosciuta e che ha risolto il problema: il tasto F9. Scusate la mia ignoranza in excel ma questo blog è pensato proprio per appuntare esperienze di vita informatica. Tutto sta nel fatto che i "calcolatori d'un tempo" non disponevano di una adeguata potenza di calcolo e nelle operazioni di copia-incolla si verificavano lunghe attese per l'aggiornamento. La soluzione adottata da MS è stata quella di inserire un'opzione per impedire l'aggiornamento automatico e forzarlo con una combinazione di tasti... il tasto F9!
Combinazioni utili per il calcolo delle formule F9 = calcola le formule modificate dall'ultimo calcolo in tutte le cartelle e fogli di lavoro aperte. MAIUSC + F9 = c…

Riflessioni sull'ordinamento

Gli algoritmi di ordinamento sono da sempre i più gettonati e interessanti dal punto di vista didattico (si veda la complessità computazionale) e funzionale (quasi tutti i programmi hanno almeno una funzione di ricerca). Proprio di questi giorni sono alcuni articoli di Programmazione.it dedicati a questo tema (link).Coding Horror in questo articolo presenta una provocazione molto interessante al di là delle opinioni personali:

The default sort functions in almost every programming language are poorly
suited for human consumption.
L'articolo pone l'attenzione sulla differenza tra l'ordinamento alfanumerico e quello ASCII solitamente usato nei metodi nativi dei linguaggi. Il discorso si ampia se poi pensiamo banalmente alla differenza tra Windows e GNU/Linux che è case sensitive.
Spesso i sistemi operativi e i linguaggi di programmazione realizzano ordinamenti rispettando l'ordine della tabella di codifica ASCII e non l'ordinamento naturale della lingua. I commenti a se…

Timeline dei Linguaggi di programmazione

O'Reilly ha reso disponibile per tutti gli appassionati un interessante poster in formato pdf in cui vengono riassunti 50 anni di storia dei linguaggi di programmazione.Il poster mostra una timeline colorata nella quale sono evidenziate le principali derivazioni tra i vari linguaggi... da vedere
http://www.oreilly.com/news/graphics/prog_lang_poster.pdf



fonte programmazione.it