银行模拟器-doBusiness方法帮助LinkedList/Queue



所以我必须为类创建一个Bank Simulator项目,到目前为止,我已经实现了一些方法。但目前我在ServiceCenter类中的doBusiness方法上遇到了问题。这是我目前掌握的代码。

Main:BankSimulator

import java.util.Scanner;
public class BankSimulator {
public static void main(String[] args)
{
    Scanner input = new Scanner(System.in);
    System.out.print("What is the time duration (in minutes) to be simulated? ");
    int maxTime = input.nextInt();
    System.out.print("What percentage of the time (0-100) does a customer arrive? ");
    int arrivalProb = input.nextInt();
    ServiceCenter bank = new ServiceCenter();
    while (bank.getTime() <= maxTime || bank.customersRemaining()) {
        if (bank.getTime() <= maxTime && customerArrived(arrivalProb)) {
            bank.addCustomer();
        }
        bank.doBusiness();
    }
    //bank.displayStats();
}
private static boolean customerArrived(int prob)
{
    return (Math.random()*100 <= prob);
}
}

服务器类别:

public class Server {
private static int nextID = 1;
private int serverID;
private int endTime;
private Customer serving;
 public Server()
 {
    serverID = nextID;
    nextID++;
    endTime = 0;
    serving = null;
}
/**
 * Accessor method for getting the server ID number.
 *   @return the server ID
 */
public int getID()
{
    return serverID;
}
/**
 * Assigns a customer to the server and begins the transaction.
 *   @param c the new customer to be served
 *   @param time the time at which the transaction begins
 */
public void startCustomer(Customer c, int time)
{
    serving = c;
    endTime = time + c.getJobLength();
}
/**
 * Accessor method for getting the current customer.
 *   @return the current customer, or null if no customer
 */
public Customer getCustomer()
{
    return serving;
}
/**
 * Identifies the time at which the server will finish with
 * the current customer
 *   @return time at which transaction will finish, or 0 if no customer
 */
public int busyUntil()
{
    return endTime;
}
/**
 * Finishes with the current customer and resets the time to completion.
 */
public void finishCustomer()
{
    serving = null;
    endTime = 0;
}
}

客户类别:

import java.util.Random;
public class Customer {
private static final int MAX_LENGTH = 8;
private static final Random rand = new Random();
private static int nextID = 1;
private int customerID;
private int arrivalTime;
private int jobLength;
/**
 * Constructs a customer with the next available ID number,
 * the specified arrival time, and a random job length.
 *   @param arrTime the time at which the customer arrives
 */
public Customer(int arrTime)
{
    customerID = nextID;
    nextID++;
    arrivalTime = arrTime;
    jobLength = rand.nextInt(MAX_LENGTH)+1;
}
/**
 * Accessor method for getting the customer's ID number.
 *   @return the customer ID
 */
public int getID()
{
    return customerID;
}
/**
 * Accessor method for getting the customer's arrival time.
 *   @return the time at which the customer arrived
 */
public int getArrivalTime()
{
    return arrivalTime;
}
/**
 * Accessor method for getting the length of the job
 *   @return the job length (in minutes)
 */
public int getJobLength()
{
    return jobLength;
}
}

我必须创建以下名为ServiceCenter的类,其中getTime返回模拟中的时间,该时间从0开始,并在每个步骤上递增。addCustomer方法,我们将一个客户添加到队列中并显示一条消息。如果客户当前正在等待,则返回true的customerRemaining。最后,增加时间的doBusiness方法,如果服务器处理完客户,则将其从队列中删除,如果服务器空闲并且队列中有客户,则开始为其服务。除了我坚持的doBusiness方法外,我已经完成了前几项。有人有什么建议吗?

上面列出的代码是由Dave Reed创建的,我对该代码不承担任何责任。

ServiceCenter类别:

import java.util.LinkedList;
import java.util.Queue;
public class ServiceCenter {
private int arrivalTime, departureTime;
private Queue <Customer> customer;
private Server server;
public ServiceCenter()
{
    server = new Server();
    customer = new LinkedList <Customer> ();
}
public String addCustomer ()
{   
    Customer customer1 = new Customer (arrivalTime);
    customer.add(customer1);
    String result = "" + customer1.getArrivalTime() + "" + customer1.getID() + "" + customer1.getJobLength();
    return result;
}
public void doBusiness()
{
    if(!customer.isEmpty())
    {
        if(server == null)
        {
            customer.remove();
        }
    }
}
public int getTime()
{
    return departureTime - arrivalTime;
}
public boolean customersRemaining()
{
    if (!(customer.isEmpty()))
        return true;
    else
        return false;
}
}

任何帮助或提示都将不胜感激。我已经想了一个星期了,但出于某种原因,排队是我的弱点。谢谢你的阅读,很抱歉读了这么久。只是想详细一点。

您正在使用new Customer (arrivalTime);,但在ServiceCenter类的构造函数中没有arrivalTime。

相关内容

  • 没有找到相关文章

最新更新