我有一个Java作业,但在以下几点上有些卡住:
这是我到目前为止所做的(不多),我不确定如何抛出和捕获异常。
private boolean windowork; public class WinidowMalfunction extends Event { public WinidowMalfunction(long delayTime) { super(delayTime); } public void action() { windowork = false; } } private boolean poweron; public class PowerOut extends Event { public PowerOut(long delayTime) { super(delayTime); } public void action() { poweron = false; } } public class ControllerException extends Exception { public ControllerEception(String except) { super(except); } public String getMessage() { return super.getMessage(); } public void shutdown() { } }
需要一些上下文,这里是完整的项目代码:GreenhouseControls.java
import java.io.*; import java.util.Calendar; import java.util.Scanner; import tme3.*; public class GreenhouseControls extends Controller { private boolean light = false; private boolean water = false; private String thermostat = "Day"; private String eventsFile = "example1.txt"; public class LightOn extends Event { public LightOn(long delayTime) { super(delayTime); } public void action() { // Put hardware control code here to // physically turn on the light. light = true; } public String toString() { return "Light is on"; } } public class LightOff extends Event { public LightOff(long delayTime) { super(delayTime); } public void action() { // Put hardware control code here to // physically turn off the light. light = false; } public String toString() { return "Light is off"; } } public class WaterOn extends Event { public WaterOn(long delayTime) { super(delayTime); } public void action() { // Put hardware control code here. water = true; } public String toString() { return "Greenhouse water is on"; } } public class WaterOff extends Event { public WaterOff(long delayTime) { super(delayTime); } public void action() { // Put hardware control code here. water = false; } public String toString() { return "Greenhouse water is off"; } } public class ThermostatNight extends Event { public ThermostatNight(long delayTime) { super(delayTime); } public void action() { // Put hardware control code here. thermostat = "Night"; } public String toString() { return "Thermostat on night setting"; } } public class ThermostatDay extends Event { public ThermostatDay(long delayTime) { super(delayTime); } public void action() { // Put hardware control code here. thermostat = "Day"; } public String toString() { return "Thermostat on day setting"; } } // An example of an action() that inserts a // new one of itself into the event list: public class Bell extends Event { public Bell(long delayTime) { super(delayTime); } public void action() { addEvent(new Bell(delayTime)); } public String toString() { return "Bing!"; } } private boolean fans; public class FansOn extends Event { public FansOn(long delayTime) { super(delayTime); } public void action() { fans = true; } public String toString() { return "Fans are on"; } } public class FansOff extends Event { public FansOff(long delayTime) { super (delayTime); } public void action() { fans = false; } public String toString() { return "Fans are off"; } } private boolean windowork; public class WinidowMalfunction extends Event { public WinidowMalfunction(long delayTime) { super(delayTime); } public void action() { windowork = false; } } private boolean poweron; public class PowerOut extends Event { public PowerOut(long delayTime) { super(delayTime); } public void action() { poweron = false; } } public class ControllerException extends Exception { public ControllerEception(String except) { super(except); } public String getMessage() { return super.getMessage(); } public void shutdown() { } } public class Restart extends Event { public Restart(long delayTime, String filename) { super(delayTime); eventsFile = filename; } public void action() { Scanner scanner = new Scanner(eventsFile); while(scanner.hasNextLine()) { String line = scanner.nextLine(); } addEvent(new ThermostatNight(0)); addEvent(new LightOn(2000)); addEvent(new WaterOff(8000)); addEvent(new ThermostatDay(10000)); addEvent(new Bell(2000)); addEvent(new WaterOn(6000)); addEvent(new LightOff(4000)); addEvent(new Terminate(12000)); addEvent(new FansOn(5000)); addEvent(new FansOff(1000)); } public String toString() { return "Restarting system"; } } public class Terminate extends Event { public Terminate(long delayTime) { super(delayTime); } public void action() { System.exit(0); } public String toString() { return "Terminating"; } } public static void printUsage() { System.out.println("Correct format: "); System.out.println(" java GreenhouseControls -f <filename>, or"); System.out.println(" java GreenhouseControls -d dump.out"); } //--------------------------------------------------------- public static void main(String[] args) { try { String option = args[0]; String filename = args[1]; if ( !(option.equals("-f")) && !(option.equals("-d")) ) { System.out.println("Invalid option"); printUsage(); } GreenhouseControls gc = new GreenhouseControls(); if (option.equals("-f")) { gc.addEvent(gc.new Restart(0,filename)); } gc.run(); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Invalid number of parameters"); printUsage(); } } } ///:~
Controller.java
package tme3; import java.util.*; public class Controller { // A class from java.util to hold Event objects: private List<Event> eventList = new ArrayList<Event>(); public void addEvent(Event c) { eventList.add(c); } public void run() { while(eventList.size() > 0) // Make a copy so you're not modifying the list // while you're selecting the elements in it: for(Event e : new ArrayList<Event>(eventList)) if(e.ready()) { System.out.println(e); e.action(); eventList.remove(e); } } } ///:~
Event.java
package tme3;
import java.io.*;
public abstract class Event {
private long eventTime;
protected final long delayTime;
public Event(long delayTime) {
this.delayTime = delayTime;
start();
}
public void start() { // Allows restarting
eventTime = System.currentTimeMillis() + delayTime;
}
public boolean ready() {
return System.currentTimeMillis() >= eventTime;
}
public abstract void action();
} ///:~
我有一个Java作业,但在以下几点上有些卡住:创建WindowMalfunction和PowerOut事件以模拟可能在GreenhouseControls中发生的问题。该事件应...
添加了代码注释以了解它。