为什么尽管在三个不同的位置显式地将变量设置为等于正确的值,但为什么我的变量却被设置为不正确的值?

时间:2019-03-06 21:41:20

标签: java object variables stack

我们必须为我的计算机科学课编写一个模拟银行的程序。该程序有三个柜员,顾客可以去哪里。当第三个柜员的大小大于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不会更改其值。我应该从这里去哪里?

0 个答案:

没有答案