gpt4 book ai didi

java - For-Each 循环困惑的严重案例

转载 作者:搜寻专家 更新时间:2023-11-01 02:26:51 24 4
gpt4 key购买 nike

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

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());
}
}

我想从每个数组中取出第一个元素并用它创建一个事件。通过创建事件并让它们打印到控制台,我取得了一些成功,但它们应该根据传递到方法 createSpecificEvent( )。事件立即打印到屏幕上,所以我认为我的 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;
}
}
}

关于java - For-Each 循环困惑的严重案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20511398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com