La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Esempio: Tombola! Parte seconda.

Presentazioni simili


Presentazione sul tema: "Esempio: Tombola! Parte seconda."— 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); } 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<NUMPLAYERS;i++){ p[i] = new Player("Pippo" + i); p[i].creaNuovaCartella(i); b1.subscribe(p[i]); } while (true) { b1.getNextNumber(); public static void main(String[] args) { Gioco gioco1 = new Gioco();

11 Gioco 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: 1 5 6 Pippo2 2 6 7 Pippo0 2 7 8 Pippo1 1 5 6 Pippo2 2 4 7 Pippo3 5 6 8 Pippo4 3 4 6 Pippo5 4 5 7 Pippo6 6 7 8 Pippo7 3 4 7 Pippo8 1 2 5 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

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(); 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); Può agire solo su variabili statiche! Output: instanceCount: 2 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) Ruolo: analogo alle librerie del C Che cos’e’: System.out.println() ?

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() {
Dammi una stringa abracadabra Hai scritto abracadabra 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(); }

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();} } Lettura di int Dammi un intero pippo java.lang.NumberFormatException: For input string: "gh" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) at java.lang.Integer.parseInt(Integer.java:426) at java.lang.Integer.valueOf(Integer.java:532) at pila.A.<init>(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 3 Hai scritto 3.0 Lettura di float

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."

Presentazioni simili


Annunci Google