Gestione di più eventi in parallelo

Modificare il programma realizzato in classe in modo che gestisca anche i 2 sensori restanti: il TouchSensor e l’UltrasonicSensor e visualizzi i valori sulle righe 2 e 3.

import lejos.nxt.Button;
import lejos.nxt.LCD;
import lejos.nxt.LightSensor;
import lejos.nxt.SensorPort;
import lejos.nxt.SensorPortListener;
import lejos.nxt.SoundSensor;

public class SensoriInsieme {

	LightSensor ls;
	SoundSensor ss;

	private class AscoltaLuce implements SensorPortListener {

		@Override
		public void stateChanged(SensorPort aSource, int aOldValue, int aNewValue) {
			int value = ls.readValue();
			LCD.drawString("LS=" + value + "   ", 0, 0);
		}

	}

	private class AscoltaSuono implements SensorPortListener {

		@Override
		public void stateChanged(SensorPort aSource, int aOldValue, int aNewValue) {
			int value = ss.readValue();
			LCD.drawString("SS=" + value + "   ", 0, 1);
		}

	}

	public SensoriInsieme() {
		ls = new LightSensor(SensorPort.S1);
		ss = new SoundSensor(SensorPort.S2);
		SensorPort.S1.addSensorPortListener(new AscoltaLuce());
		SensorPort.S2.addSensorPortListener(new AscoltaSuono());
	}

	public static void main(String[] args) {
		new SensoriInsieme();
		Button.ESCAPE.waitForPressAndRelease();
	}

}

Gestori di evento in NXT

Esercizio per casa: realizzare un programma che legga e visualizzi sulla prma riga il valore del sensore di luce mediante un ascoltatore di evento; rallentare l’esecuzione con una pausa di 1/2 secondo.

1º metodo

import lejos.nxt.Button;
import lejos.nxt.SensorPort;
import lejos.nxt.SensorPortListener;
import lejos.nxt.TouchSensor;

public class TouchSensorEvent {
	
	private TouchSensor ts;
	
	private class TouchSensorListener implements SensorPortListener {

		@Override
		public void stateChanged(SensorPort aSource, int aOldValue, int aNewValue) {
			System.out.println(aOldValue + " => " + aNewValue);	
		}
		
	}

	public TouchSensorEvent() {
		ts = new TouchSensor(SensorPort.S1);
		SensorPort.S1.addSensorPortListener(new TouchSensorListener());
	}
	
	public static void main(String[] args) {
		new TouchSensorEvent();
		Button.ESCAPE.waitForPressAndRelease();
	}

}

2º metodo

import lejos.nxt.Button;
import lejos.nxt.SensorPort;
import lejos.nxt.SensorPortListener;
import lejos.nxt.TouchSensor;

public class TouchSensorEvent2 implements SensorPortListener {

	private TouchSensor ts;

	@Override
	public void stateChanged(SensorPort aSource, int aOldValue, int aNewValue) {
			System.out.println(aOldValue + " => " + aNewValue);	
	}

	public TouchSensorEvent2() {
		ts = new TouchSensor(SensorPort.S1);
		SensorPort.S1.addSensorPortListener(this);
	}

	public static void main(String[] args) {
		new TouchSensorEvent2();
		Button.ESCAPE.waitForPressAndRelease();
	}

}

3º metodo

import lejos.nxt.Button;
import lejos.nxt.SensorPort;
import lejos.nxt.SensorPortListener;
import lejos.nxt.TouchSensor;

public class TouchSensorEvent3 {

	private TouchSensor ts;
	
	public TouchSensorEvent3() {
		ts = new TouchSensor(SensorPort.S1);
		SensorPort.S1.addSensorPortListener(new SensorPortListener() {

			@Override
			public void stateChanged(SensorPort aSource, int aOldValue, int aNewValue) {
			System.out.println(aOldValue + " => " + aNewValue);	
			}
			
		} );
	}
	
	public static void main(String[] args) {
		new TouchSensorEvent3();
		Button.ESCAPE.waitForPressAndRelease();
	}

}

Interfacce

Creare una classe astratta chiamata Punto contenente gli attributi double x, y, z e il metodo astratto sposta(x,y,z). Creare la sottoclasse PuntoMateriale avente in più l’attributo double massa e costruire il metodo sposta(x,y,z).

Creare l’interfaccia Fisica avente gli attributi C (velocità della luce), AU (unità astronomica), PC (parsec).

Creare un programma con il metodo main che utilizzi PuntoMateriale e lo sposti di alcune unità astronomiche mediante sposta(), utilizzando l’interfaccia Fisica.

Classi astratte e interfacce

Inserire all’interno della classe astratta Figura due attributi privati double x e y con relativi getter e setter. Modificare la classe quadrato in maniera tale da utilizzare questi due nuovi attributi per definire la posizione del quadrato; aggiungere un nuovo costruttore che permetta anche inserimento delle coordinate della posizione. Creare analogamente a Quadrato la classe Rettangolo con le stesse funzionalità di quadrato. Scrivere per entrambe le figure i metodi muove e ingrandisce per spostare la posizione (x,y) e modificare le dimensioni.

Soluzione: classiastratte.zip

Ripasso di Java

Progetto Eclipse: cellulare.zip

Creare all’interno delle due classi i metodi clone e equals; creare la sottoclasse di Cellulare di nome CellulareConsumo in cui è presente l’attributo creditoResiduo; devono essere presenti anche i metodi ricarica(double valore) e telefonata(durataInMinuti) che servono per ricaricare il credito e per consumarlo (utilizzare la formula costo telefonata = 0.15 + 0.05 * durataInMinuti).