我们必须为我的计算机科学课编写一个模拟银行的程序。该程序有三个柜员,顾客可以去哪里。当第三个柜员的大小大于0时,它将执行一堆任务。我在数据字段中实例化了该第三个柜员的数据值,如下所示:
public static Task firstTask = new Task(916,3);
public static Teller teller3 = new Teller(new Customer(0,0,0),firstTask,3);
然后,我编写了一个使柜员类开始柜员开始任务的方法。
public void startTask(Task arrivingTask) {
currentTask = arrivingTask;
}
我在main方法中使用与firstTask相同的值来调用它。
teller3.startTask(firstTask);
在此之后,我将taskStack 2的新任务推入。
taskStack.push(new Task(910,12));
taskStack.push(new Task(913,3));
我还实例化了nextTask(到达到达文件的下一个任务)。
Task nextTask = new Task(925,2);
出纳员类中也有一个打印方法来打印任务。
public void printTask() {
System.out.println("currentTask = (" + this.currentTask.getArrival() + "," + this.currentTask.getServiceTime() + ")");
}
如果我运行以下代码:teller3.printTask();
,则输出为currentTask =(925,2)。
与客户进行类似操作时,我不会遇到此问题。我正在数据字段中实例化这些值,并执行诸如taskStack.push(n)之类的操作,其中n = new Task(910,12)。除此以外,我代码中的其他所有内容均正常运行。
稍后在代码中,event5(处理任务完成的事件)包含与该任务有关的以下代码,仅此而已。
firstTask.printTask();
if (taskStack.getSize() > 0) {
System.out.println(currentTime);
firstTask = taskStack.pop();
teller3.startTask(firstTask);
Event newEvent = new Event(currentTime +
teller3.T1ServiceTime(),5);
Elist.insert(newEvent);
teller3.isBusy = true;
firstTask.printTask();
}
在这里,您可以看到我做了两件事。我首先打印了任务。任务始终打印为我先前分配给nextTask的值,而我从未在程序中将其声明为firstTask。当taskStack大于0时,我将firstTask设置为taskTask.pop()。它实际上会弹出值,但不会更改firstTask的值。我从事件列表中知道,因为每三分钟后会添加一个新事件。我在if语句运行后再次打印任务(从运行代码中可以知道),并且firstTask不会更改其值。我应该从这里去哪里?