队列和堆栈招聘和解雇

时间:2015-02-06 19:21:05

标签: java stack queue

我为TA完成了这个程序和演示。我完全忘了一件事。因此,该计划是关于使用堆栈和队列雇用和解雇人员。除了一件事,我想出了一切。我必须雇用至少3个人,无论第一个申请人是谁,我都会先雇用他们。这是问题所在:

当我解雇某人(雇用最后一个人)时,该人应该是下一个被雇用的人。示例:

Fired Name: b SS: 2

next person hired should be

Hired Name: b SS: 2.

我无法弄清楚如何让最后一个人被解雇成为下一个被雇用的人。这是我的计划:

class Person {

public String name;
public String SS;

public Person(String N, String S) {
    this.name = N;
    this.SS = S;
}
}

class Manager {

Scanner keyboard = new Scanner(System.in);
private Queue<Person> app = new Queue<Person>();
public Stack<Person> hire = new Stack<Person>();
public Stack<Person> fire = new Stack<Person>();

public void Apply() throws QueueException {
    System.out.print("Applicant Name: ");
    String appName = keyboard.nextLine();
    System.out.print("SSN: ");
    String appSS = keyboard.nextLine();
    Person apply = new Person(appName, appSS);
    app.enqueue(apply);

}

public void hire() throws QueueException {
    if (!app.isEmpty()) {
        Person newHire = hire.push(app.dequeue());
        System.out.println("Hired \nName: " + newHire.name + " SS: " + newHire.SS);
       //hire.push(app.dequeue());

    } else if (!fire.isEmpty()) {
        Person newFire = app.dequeue();
        System.out.println("Hired \nName: " + newFire.name + " SS: " + newFire.SS);
    } else {
        System.out.println("Nobody to hire.");
    }
}

public void fire() throws StackException {
    if (!hire.isEmpty()) {
        Person newFire = fire.push(hire.pop());
        System.out.println("Fired \nName: " + newFire.name + " SS: " + newFire.SS);
        fire.push(hire.pop());

    } else {
        System.out.println("Nobody to fire");
    }

    }

}

public class Management {

public static void main(String[] args) throws QueueException, StackException {
    Scanner keyboard = new Scanner(System.in);
    Manager user = new Manager();
    boolean test = true;

    while (test) {
        System.out.print("Press \n\t1 ACCEPT APPLICANT");
        System.out.print("\n\t2 Hire \n\t3 Fire \n\t4 Quit:");
        System.out.print("\nAnswer: \n");
        int action = keyboard.nextInt();
        String space = keyboard.nextLine();

        if (action == 1) {
            user.Apply();
        } else if (action == 2) {
            user.hire();
        } else if (action == 3) {
            user.fire();
        } else if (action == 4) {
            System.exit(0);
        } else {
            System.out.println("Please try again.");
        }

    } 

1 个答案:

答案 0 :(得分:0)

你在hire()方法上有这个错误。

Person newFire = app.dequeue();

即使应用程序队列为空,您也会看到正在执行此行。只需使用fire stack而不是app queue。

public void hire() throws QueueException {
if (!app.isEmpty()) {
    Person newHire = hire.push(app.dequeue());
    System.out.println("Hired \nName: " + newHire.name + " SS: " + newHire.SS);
   //hire.push(app.dequeue());

} else if (!fire.isEmpty()) {
    Person newFire = fire.pop();
    hire.push(newFire);
    System.out.println("Hired \nName: " + newFire.name + " SS: " + newFire.SS);
} else {
    System.out.println("Nobody to hire.");
}
}