更新唯一变量Simulation 1 line 1 queue的Java问题

更新唯一变量Simulation 1 line 1 queue的Java问题,java,queue,simulation,Java,Queue,Simulation,我遇到了一个问题,变量在应该更新的时候没有更新。我也不确定在哪里更新这个变量,因为它不适合我代码中的任何if语句测试。您必须了解,我所需要修复的是变量peopleCompleted在第一个输入的人完成时更新的位置。在我的代码中,您将看到这个第一人称到达的位置,他取代了被诅咒的,然后被打印出来,而不被添加到队列中,队列中的其他所有都在排队。您会注意到,serviceComplete()中的curServed被更改,因为它处理队列中的所有其他人。下面是我的代码和sameple输出不正确,因为没有为第

我遇到了一个问题,变量在应该更新的时候没有更新。我也不确定在哪里更新这个变量,因为它不适合我代码中的任何if语句测试。您必须了解,我所需要修复的是变量
peopleCompleted
第一个输入的人完成时更新的位置。在我的代码中,您将看到这个第一人称到达的位置,他取代了
被诅咒的
,然后被打印出来,而不被添加到队列中,队列中的其他所有都在排队。您会注意到,
serviceComplete()
中的
curServed
被更改,因为它处理队列中的所有其他人。下面是我的代码和sameple输出不正确,因为没有为第一个人更新
peopleCompleted
。基本上,我真的需要帮助,知道在哪里更新他的完成放在首位。这是一个单线队列的模拟。我是初学者/学生

代码

public boolean arrival()
  {
     Customer myCust = new Customer(curTime);
     if(curServed == null) // If no one being served
     {
        curServed = myCust; // myCust is served
        peopleNoWait++;
        return true;
     }
     else if(!q.isFull())
     {
        q.add(myCust);
        peopleThatHadToWait++;
        return true;
     }
     return false;
  }

  public Customer serviceComplete()
  {  
     if(q.isEmpty())
     {
        curServed = null;
     }
     else
     {
        curServed = q.remove(); // Remove next from customer queue
        peopleCompleted++;
        sumOfWaitTime += getWaitTime();
     }
     return curServed;
  }
下面的这些将处理上面的模拟

返回以下VAL的方法

public int getNumWaiting()
  {
     int total = peopleThatHadToWait - peopleCompleted;
     return total;
  }

  public int getTotalServed()
  {
     return peopleCompleted;
  }
错误为的示例输出:

  • 客户C1/T2在时间7完成。等待的号码是2应该是1

  • 客户C2/T6在时间7时完成。等待的号码是1应该是0

  • 客户C3/T7在时间13时完成。等待的号码是5四,

  • 客户C4/T7在时间16时完成。等待的号码是4等

  • 客户C5/T8在时间16时完成。等待的号码是3

  • 客户C6/T8在时间17时完成。等待的号码是2

  • 客户C7/T9在时间17时完成。等待的号码是1

  • 服务人数为7人应该是8岁

  • 服务人数为7人应该是8岁

  • 评论:

    这些是引起问题的线路。等待的人数和人数 被送达的是那些不正确的。这是因为缺少 在第一个人完成更新后,他完成了更新,这
    根据您的建议,serviceComplete()中没有完成此操作。

    我怀疑这是因为这里的代码块

    private void doServiceComplete()
    {
      if(sim.notBeingServed() == true)
      {
         System.out.println("No customer is being served at the present time"
               + " of " + sim.getTime() + ".");
      }
      else
      {
         System.out.print("Customer " + sim.getCurCust().toString() + 
               " finished at time " + sim.getTime() + ". Number waiting" + 
               " is ");
         System.out.println(sim.getNumWaiting() + ".");
      }
      sim.serviceComplete();
    }
    
    当您到达
    sim.getNumWaiting()
    时,等待您的人将比您预期的少一人
    sim.serviceComplete()
    具有
    peopleCompleted++
    ,这是在打印结果后执行的。在调用
    sim.getNumWaiting()
    之前,应该将其移到方法的开头或其他逻辑位置

    例如:

    private void doServiceComplete()
    {
      sim.serviceComplete();
    
      if(sim.notBeingServed() == true)
      {
         System.out.println("No customer is being served at the present time"
               + " of " + sim.getTime() + ".");
      }
      else
      {
         System.out.print("Customer " + sim.getCurCust().toString() + 
               " finished at time " + sim.getTime() + ". Number waiting" + 
               " is ");
         System.out.println(sim.getNumWaiting() + ".");
      }
    }
    

    嗨,用户3386412,在堆栈溢出问题上快速有效地回答问题的一个好方法是将问题从实现细节的细节中抽象出来。这涉及到你努力准确地理解你想要做什么(而不是像你在这里所做的那样询问如何做一些具体的事情,这些事情可能不是如何解决你的问题)。这有助于我们帮助你。很难把它放在一个一般的领域,因为我不能真正概括这个问题。我明白你在说什么。当你尽可能减少解释和代码,答案来得更快时:-)我必须记住这一点。谢谢你,塞伦顿。我想我会把这个问题留待考虑,但为了将来,我会尽量使事情更一般化。这确实是我在大约一周前得出的结论。谢谢你,虽然我没有机会看,但这是正确的
    private void doServiceComplete()
    {
      sim.serviceComplete();
    
      if(sim.notBeingServed() == true)
      {
         System.out.println("No customer is being served at the present time"
               + " of " + sim.getTime() + ".");
      }
      else
      {
         System.out.print("Customer " + sim.getCurCust().toString() + 
               " finished at time " + sim.getTime() + ". Number waiting" + 
               " is ");
         System.out.println(sim.getNumWaiting() + ".");
      }
    }