La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Esempio: Tombola! Parte seconda. Publisher - Subscriber package tombola; public interface Publisher { public void subscribe(Object sender); public void.

Presentazioni simili


Presentazione sul tema: "Esempio: Tombola! Parte seconda. Publisher - Subscriber package tombola; public interface Publisher { public void subscribe(Object sender); public void."— Transcript della presentazione:

1 Esempio: Tombola! Parte seconda

2 Publisher - Subscriber package tombola; public interface Publisher { public void subscribe(Object sender); public void unsubscribe(Object sender); public void notifyAll(Object x); } package tombola; public interface Subscriber { public void getNotification(Object x); }

3 Banco package tombola; import java.util.*; public class Banco implements Publisher { Random generatore; Set numeriUsciti; final int MAXNUM = 9; Collection subscriberSet; public Banco() { generatore = new Random(System.currentTimeMillis()/101); numeriUsciti = new HashSet(); subscriberSet = new HashSet(); }

4 Banco int getNextNumber() { boolean isNew = false; int num = 0; do { num = generatore.nextInt(MAXNUM) + 1; isNew = numeriUsciti.add(new Integer(num)); } while (!isNew); System.out.println("==> Estratto il numero:"+num); notifyAll(new Integer(num)); return num; }

5 Banco public void subscribe(Object x) { subscriberSet.add(x); } public void unsubscribe(Object x) { subscriberSet.remove(x); } public void notifyAll(Object x){ Iterator i=subscriberSet.iterator(); while (i.hasNext()) { ((Subscriber)i.next()).getNotification(x); } public static void main(String[] args) { Banco banco1 = new Banco(); banco1.test(); } } // end of class

6 Player package tombola; import java.util.*; public class Player implements Subscriber { Collection cartella; Collection cartellaOriginale; final int MAXNUM=9; final int NCELLS=3; String nome=null; Player(String nome){this.nome=nome;}

7 Player void creaNuovaCartella( int k ){ Random generatore = new Random(System.currentTimeMillis()*k); cartella=new HashSet(); for (int i=1; i<=NCELLS; i++) { boolean creatoNuovoNumero=false; do { int x=generatore.nextInt(MAXNUM)+1; creatoNuovoNumero=cartella.add(new Integer(x)); } while (!creatoNuovoNumero); } cartellaOriginale=new TreeSet(); cartellaOriginale.addAll(cartella); mostraCartella(); }

8 Player public boolean checkNumber(int x) { boolean presente=cartella.remove(new Integer(x)); if (presente) { System.out.println(nome+" ha il numero "+x); } return presente; } public boolean hasFinished() { if (cartella.isEmpty()) { System.out.println(nome+" ha finito!"); System.out.println("Aveva la seguente cartella:"); mostraCartella(); return true; } else return false; }

9 Player public void mostraCartella(){ Iterator iter=cartellaOriginale.iterator(); while (iter.hasNext()) { System.out.print(iter.next()+" "); } System.out.println(nome); } public void getNotification(Object x) { checkNumber(((Integer)x).intValue()); if (hasFinished()) System.exit(0); }

10 Gioco public class Gioco { final int NUMPLAYERS=10; public Gioco() { Banco b1=new Banco(); Player p[]=new Player[NUMPLAYERS]; for (int i=0;i

11 Gioco Pippo Pippo Pippo Pippo Pippo Pippo Pippo Pippo Pippo Pippo9 ==> Estratto il numero:4 Pippo3 ha il numero 4 Pippo6 ha il numero 4 Pippo5 ha il numero 4 Pippo8 ha il numero 4 ==> Estratto il numero:2 Pippo3 ha il numero 2 Pippo1 ha il numero 2 Pippo9 ha il numero 2 Pippo0 ha il numero 2 ==> Estratto il numero:5 Pippo4 ha il numero 5 Pippo2 ha il numero 5 Pippo6 ha il numero 5 Pippo9 ha il numero 5 ==> Estratto il numero:6 Pippo4 ha il numero 6 Pippo2 ha il numero 6 Pippo5 ha il numero 6 Pippo0 ha il numero 6 Pippo7 ha il numero 6 ==> Estratto il numero:1 Pippo2 ha il numero 1 Pippo2 ha finito! Aveva la seguente cartella: Pippo2

12 Fondamenti di Java Static

13 Modificatori: static Variabili e metodi associati ad una Classe anziche ad un Oggetto sono definiti static. Le variabili statiche servono come singola variabile condivisa tra le varie istanze I metodi possono essere richiamati senza creare una istanza.

14 Variabili static: esempio 1 class S { static int instanceCount = 0; //variabile di classe S() {instanceCount++;} } public class A { public static void main(String a[]) { new A(); } A() { for (int i = 0; i < 10; ++i) { S instance=new S(); } System.out.println("# of instances: "+S.instanceCount); } Output: # of instances: 10

15 Variabili static: esempio 2 class S { static int instanceCount = 0; //variabile di classe S() {instanceCount++;} public void finalize() {instanceCount--;} } public class A { public static void main(String a[]) { new A();} A() { for (int i = 0; i < 10; ++i) { S instance=new S(); } System.out.println("# of instances: "+S.instanceCount); System.gc(); System.runFinalization(); System.out.println("# of instances: "+S.instanceCount); } Output: # of instances: 10 # of instances: 0

16 Metodi static: esempio 1 class S { static int instanceCount = 0; //variabile di classe S() {instanceCount++;} static void azzeraContatore() {instanceCount=0;} } public class A { public static void main(String a[]) { new A(); } A() { for (int i = 0; i < 10; ++i) { if (i%4==0) S.azzeraContatore(); S instance=new S(); } System.out.println("instanceCount: "+S.instanceCount); } Output: instanceCount: 2 Può agire solo su variabili statiche! Ruolo: Metodi che agiscono su variabili statiche

17 metodi static: esempio 2 Math.sqrt(double x); System.gc(); System.arrayCopy(...); System.exit(); Integer.parseInt(String s); Float.parseFloat(String s); Notare la maiuscola! (per convenzione) Che cose: System.out.println() ? Ruolo: analogo alle librerie del C

18 Perchè il main è static? public class A { String s="hello"; public static void main(String a[]) { System.out.println(s); } Non static variable s cannot be referenced from static context public class A { String s="hello"; public static void main(String a[]) { new A; } A() { System.out.println(s); } hello

19 Input/Output, Eccezioni

20 Lettura di stringhe import java.io.*; public class A { public A() { BufferedReader s = new BufferedReader( new InputStreamReader(System.in)); try { System.out.println("Dammi una stringa"); String str=s.readLine(); System.out.println("Hai scritto "+str); }catch (IOException e){ e.printStackTrace(); } public static void main(String [] ar) { A a=new A(); } } Dammi una stringa abracadabra Hai scritto abracadabra

21 Lettura di int public A() { int i=0; BufferedReader s = new BufferedReader( new InputStreamReader(System.in)); try { System.out.println("Dammi un intero"); i=Integer.parseInt(s.readLine()); System.out.println("Hai scritto "+i); }catch (Exception e) {e.printStackTrace();} } Dammi un intero 2 Hai scritto 2

22 Lettura di int public A() { int i=0; BufferedReader s = new BufferedReader( new InputStreamReader(System.in)); try { System.out.println("Dammi un intero"); i=Integer.parseInt(s.readLine()); System.out.println("Hai scritto "+i); }catch (IOException e) {e.printStackTrace();} } Dammi un intero pippo java.lang.NumberFormatException: For input string: "gh" at java.lang.NumberFormatException.forInputString(NumberFormatException.ja va:48) at java.lang.Integer.parseInt(Integer.java:426) at java.lang.Integer.valueOf(Integer.java:532) at pila.A. (A.java:11) at pila.A.main(A.java:19) Exception in thread "main"

23 Lettura di float public A() { float f=0; boolean error; BufferedReader s = new BufferedReader( new InputStreamReader(System.in)); try { do { System.out.println("Dammi un float"); try{ error=false; f=Float.parseFloat(s.readLine()); } catch (NumberFormatException e) { error=true; System.out.println("Input non valido"); } } while (error); System.out.println("Hai scritto "+f); }catch (IOException e) {e.printStackTrace();} } Dammi un float pippo Input non valido Dammi un float 3 Hai scritto 3.0

24 Lettura di stringhe con GUI import javax.swing.JOptionPane; public A() {... String input = JOptionPane.showInputDialog( "How are you?"); System.out.println(input); System.exit(1); } Essenziale! Altrimenti la thread che gestisce la GUI rimane viva, e il processo non termina


Scaricare ppt "Esempio: Tombola! Parte seconda. Publisher - Subscriber package tombola; public interface Publisher { public void subscribe(Object sender); public void."

Presentazioni simili


Annunci Google