public class ATree {
	private ANode radice;
	private int size;
	private static ConsoleReader lettore = new ConsoleReader(System.in);
	private static int vittorie, giocate;
	
	
	public ATree() {
		this(null);
	}
	
	public ATree(ANode v) {
		radice = v;
		if(v != null)
			size = 1;
	}
	
	public boolean isEmpty() {
		return radice == null;
	}
	
	public boolean isRoot(ANode v) {
		if(v != null)
			return v.isRoot();
		else
			return false;
	}
	
	public boolean isLeaf(ANode v) {
		if(v != null)
			return v.isLeaf();
		return 
			false;
	}
	
	public void go() {
		System.out.println("Inizia partita #" + ++giocate + "!");
		if(isEmpty())
			miArrendo();
		else
			go(radice);
	}

	private void go(ANode v) {
		if(v.isLeaf())
			ciProvo(v);
		else {
			String ans = chiedi(v.stringa + "? ", "[sSyYnN]");
			if(ans.matches("[sSyY]"))
				go(v.vero);
			else
				go(v.falso);
		}
	}
		
	private void ciProvo(ANode v) {
		String ans = chiedi("Risposta: " + v.stringa + "? ", "[sSyYnN]");
		if(ans.matches("[sSyY]"))
			System.out.println("Giocate = " + giocate + " - Vittorie = " + ++vittorie);
		else {
			ANode newan = new ANode(chiedi("Cos'era? ", ".+"));
			ANode newq = new ANode(chiedi("Proprieta` per distinguere " + newan.toString() + 
			        " da " + v.toString() + "? ", ".+"));
			newq.vero = newan;
			newan.genitore = newq;
			if(v.genitore != null) {
				if(v.genitore.vero == v)
					v.genitore.vero = newq;
				else
					v.genitore.falso = newq;
				newq.genitore = v.genitore;
			} else
				radice = newq;
			newq.falso = v;
			v.genitore = newq;
			size += 2;
		}
	}
	
	private void miArrendo() {
		ANode newan = new ANode(chiedi("Mi arrendo. Cos'era? ", ".+"));
		radice = newan;
		size++;
	}
	
	private static String chiedi(String q, String regEx) {
		String ans;
		do {
			System.out.print(q);
			ans = lettore.readLine();
		} while((ans == null) || !ans.matches(regEx));
		return ans;
	}
}

 


Bacheca di Algoritmi e Strutture Dati a.a. 2007-08 - canale A - L

forum del corso

ultima modifica: 03/04/2008 23.35
by FdA