我有一个程序可以从文本文件中提取数据并将其存储在两个不同的数组中,如下所示:

public void extractDataIntoArray() {
    array = new ArrayList<String>();
    while (s.hasNext()) {
        s.useDelimiter("[^0-9]+");
        array.add(s.next());
    }
  }

  public void extractDataIntoArray2() {
        array2 = new ArrayList<String>();
        while (s.hasNext()) {
            s.useDelimiter("Event=|,(.)+[\\r\\n]*Event=|,(.)+[\\r\\n]*");
            array2.add(s.next());
        }
  }

我想从每个数组中获取第一个元素,并使用它创建一个Event。通过创建事件并将它们打印到控制台上,我已经取得了一些成功,但是基于传递给createSpecificEvent()方法的“l”值,它们应该以交错的延迟打印到控制台上。这些事件会立即显示在屏幕上,所以我认为我的for-each循环是错误的,并且正在每个createSpecificEvent()实例中传递“0”。
public void action() {
    openFile();                     // grab file with Scanner
    extractDataIntoArray();         // extract values from text value and put in array

    for (String  e : array) {
        long l = Long.parseLong(e); // for each value in array, convert to long and set to l

        openFile();                     // grab file with Scanner...
        extractDataIntoArray2();        // extract values from text file and put in array2

        for (String  e2 : array2) {
            event = createSpecificEvent(e2, l);
            //System.out.println(event);
            addEvent(event);
        }
    }
}

这是我的createSpecificEvent()代码的样子:
public Event createSpecificEvent(String eventName, long delayTime) {
    Event event = null;

    switch(eventName) {
    case "ThermostatNight":
        event = new ThermostatNight(delayTime);
        break;
    case "ThermostatDay":
        event = new ThermostatDay(delayTime);
        break;
    case "LightOn":
        event = new LightOn(delayTime);
        break;
    case "LightOff":
        event = new LightOff(delayTime);
        break;
    case "WaterOn":
        event = new WaterOn(delayTime);
        break;
    case "WaterOff":
        event = new WaterOff(delayTime);
        break;
    case "Bell":
        event = new Bell(delayTime);
        break;
    case "FansOn":
        event = new FansOn(delayTime);
        break;
    case "FansOff":
        event = new FansOff(delayTime);
        break;
    case "Terminate":
        event = new Terminate(delayTime);
        break;
    }

    return event;
}

这是我的文本文件的样子:
Event=ThermostatNight,time=0
Event=LightOn,time=2000
Event=WaterOff,time=10000
Event=ThermostatDay,time=12000
Event=Bell,time=9000,rings=5
Event=WaterOn,time=6000
Event=LightOff,time=4000
Event=Terminate,time=20000
Event=FansOn,time=7000
Event=WindowMalfunction,time=15000
Event=FansOff,time=8000

输出如下所示:
Restarting system
Thermostat on night setting
Light is on
Greenhouse water is off
Thermostat on day setting
Bing!
Greenhouse water is on
Light is off
Terminating

第一行应立即打印,最后一行应在20秒后打印。

最佳答案

 public void action() {

 openFile();                     // grab file with Scanner
 extractDataIntoArray();         // extract values from text value and put in array

 openFile();                     // grab file with Scanner...
 extractDataIntoArray2();        // extract values from text file and put in array2

 for(int i = 0; i < array.size() ;i++)
 {
    long l = Long.parseLong(array.get(i));

    string e2 = array2.get(i);
    event = createSpecificEvent(e2, l);
    addEvent(event);

    if(e2.equals("Terminate"))
     {
       break;
     }
 }
}

10-07 21:03