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

时间:2014-10-25 13:36:31

标签: java linked-list 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方法,我们将一个客户添加到队列并显示一条消息。 customerRemaining,如果客户当前正在等待,则返回true。最后,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;
}
}

任何帮助或提示将不胜感激。我现在一直试图解决这个问题,但由于某些原因,排队是我的弱点。感谢阅读并抱歉这么长时间。只是希望它详细。

1 个答案:

答案 0 :(得分:0)

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