Java中的循环双链表程序(家庭作业帮助)



基本上,该程序应该创建一个高管"圆桌会议",主席不能更换。我有点几乎知道自己在做什么,我的插入和删除高管的方法已经完成了一半,但我只是试着测试我的代码,看看它是如何运行的,当我输入主席信息时,它就会出错。此外,我根本不确定如何处理ExecutiveList中的removeByCorporation方法。我几乎肯定这个方法几乎都是不正确的,我只是不知道如何删除像这样的循环双链表中的节点。

*不需要帮助我打印方法,我只是还没有掌握它们。

tl;博士:1) 为什么它马上就崩溃了?2) 我确信我的removeByCorporation方法是完全错误的。如果是,关于如何修复它,有什么建议或帮助吗?

这是我遇到麻烦的两个类,如果你想看其他的,请告诉我,我会发布它们,但它们99%都是getter和setter。

一级

public class ExecutiveList {
private ExecutiveNode chair;
ExecutiveNode cursor;
public ExecutiveList() {
}
public ExecutiveList (Executive chairperson) {
    chair.setExecutive(chairperson);
    chair.left = chair;
    chair.right = chair;
}
public void insertLeftOfChair(Executive exec) {
    ExecutiveNode newExec = new ExecutiveNode();
    newExec.setExecutive(exec);
    chair.setLeft(newExec);
}
public boolean insertRightOfExec (Executive exec, String target) {
    cursor = chair;
    ExecutiveNode newExec = new ExecutiveNode();
    do { cursor = cursor.getLeft();
    if (cursor.getExecutive().equals(exec)) {
        newExec.setExecutive(exec);
        cursor.getRight().setLeft(newExec);
        newExec.setLeft(cursor);
        newExec.setRight(cursor.getRight());
        cursor.setRight(newExec);
        return true;
    }
    else {
        return false;
    }
    }       while (cursor.getExecutive().getExecutiveName() != target);

}
public boolean insertLeftOfExec (Executive exec, String target) {
    cursor = chair;
    ExecutiveNode newExec = new ExecutiveNode();
    do { cursor = cursor.getLeft();
        if (cursor.getExecutive().equals(exec)) {
            newExec.setExecutive(exec);
            cursor.getLeft().setRight(newExec);
            newExec.setRight(cursor);
            newExec.setLeft(cursor.getRight());
            cursor.setLeft(newExec);
            return true;
        }
        else {
            return false;
        }
    }       while (cursor.getExecutive().getExecutiveName() != target);
}
public boolean removeTargetExec(String name) {
    if (chair.equals(name)) {
        return false;
    }
    else {
        return false;
    }
}
public int removeByCorporation(String corporation) {
    int removed = 0;
    cursor = chair;
    do {
        if (cursor.getExecutive().getCompanyName().equals(corporation)) {
            cursor.setExecutive(null);
            cursor.getLeft();
            removed = removed + 1;
        }
    } while (removed > 0);
    return removed;
}
public void printByCorporation(String corporation) {
}
public void printAllClockwise() {
}
public void printAllCounterClockwise() {
}
    }

二级

import java.util.Scanner;
    public class MeetingManager {
public static void main(String[] args) {
    // scanner to read the users input
    Scanner input = new Scanner(System.in);
    // strings to pass information about the chairperson
    String chairpersonName;
    String chairpersonCompany;
    // strings to pass information about executives other
    // than the chairperson
    String execName;
    String execCompany;
    String target;
    // holds information on whether on not an operation
    // was successful and how many executives were removed
    // for the remove by corporation command.
    boolean success;
    int numRemoved = 0;
    // prompts the user for information about the chairperson
    // and sets it to an executive object name chairperson
    System.out.println("Enter the name of the chairperson: ");
    chairpersonName = input.next();
    if (chairpersonName.length() < 1) {
        System.out.println("Please enter a full name");
    }
    System.out.println("Enter the company of the chairperson: ");
    chairpersonCompany = input.next();
    if (chairpersonCompany.length() < 1) {
        System.out.println("Please enter a full name");
    }
    Executive chairperson = new Executive(chairpersonName, chairpersonCompany);
    // creates a new ExecutiveList object and passes information
    // about the chairperson
    ExecutiveList list = new ExecutiveList(chairperson);
    // for loop to repeatedly print the menu and take instructions
    // from the user until they choose to exit.
    for (int i = 1; i > 0; i++) {
        ShowMenu();
        String option = input.next();
        // error message for improper input
        if (option.length() > 3) {
            System.out.println("You can only enter one option");
        }
        // insert left of chairperson
        else if (option.toUpperCase().equals("ILC")) {
            System.out.println("Enter the executives name: ");
            execName = input.next();
            System.out.println("Enter the executives company: ");
            execCompany = input.next();
            Executive newGuy = new Executive(execName, execCompany);
            list.insertLeftOfChair(newGuy);
            System.out.println("Insertion successful.");
        }
        // insert left of executive
        else if (option.toUpperCase().equals("ILE")) {
            System.out.println("Enter the executives name: ");
            execName = input.next();
            System.out.println("Enter the executives company: ");
            execCompany = input.next();
            Executive newGuy = new Executive(execName, execCompany);
            System.out.println("Enter the name of the target executive: ");
            target = input.next();
            success = list.insertLeftOfExec(newGuy, target);
            if (success == true) {
                System.out.println("Insertion successful.");
            }
            else {
                System.out.println("The executive could not be inserted.");
            }
        }

        // insert right of executive
        else if (option.toUpperCase().equals("IRE")) {
            System.out.println("Enter the executives name: ");
            execName = input.next();
            System.out.println("Enter the executives company: ");
            execCompany = input.next();
            Executive newGuy = new Executive(execName, execCompany);
            System.out.println("Enter the name of the target executive: ");
            target = input.next();
            success = list.insertRightOfExec(newGuy, target);
            if (success) {
                System.out.println("Insertion successful.");
            }
            else {
                System.out.println("The executive could not be inserted.");
            }
        }
        // remove target executive
        else if (option.toUpperCase().equals("RTE")) {
            System.out.println("Enter the name of the executive to remove: ");
            execName = input.next();
            success = list.removeTargetExec(execName);
            if (execName.equals(chairpersonCompany))
                list.removeTargetExec(execName);
            if (success) {
                System.out.println(execName + " has been removed from the meeting.");
            }
            else {
                System.out.println(execName + " could not be found.");
            }
        }
        // remove by corporation
        else if (option.toUpperCase().equals("RBC")) {
            System.out.println("Enter the name of the corporation to remove: ");
            execCompany = input.next();
            numRemoved = list.removeByCorporation(execCompany);
            if (execCompany.equals(chairperson.getCompanyName())) {
                System.out.println("Invalid command: cannot remove all employees from the chairperson's corporation");
            }
            else if (numRemoved < 1) {
                System.out.println("That corporation could not be found and no executives were removed.");
            }
            else {
                System.out.println(numRemoved + " executive(s) from " + execCompany + " have been removed from the meeting.");
            }
        }
        // prints by corporation
        else if (option.toUpperCase().equals("PBC")) {
            System.out.println("Enter the name of a corporation to display: ");
            execCompany = input.next();
            list.printByCorporation(execCompany);
        }
        // prints all counter-clockwise
        else if (option.toUpperCase().equals("PCC")) {
            list.printAllCounterClockwise();
        }
        // prints all clockwise
        else if (option.toUpperCase().equals("PCL")) {
            list.printAllClockwise();
        }
        else if (option.toUpperCase().equals("EXT")) {
            System.out.println("Terminating program...");
            break;
        }
        // Error message
        else {
            System.out.println("Please select a valid option.");
        }
    }
}

// displays menu and prompts user for input
public static void ShowMenu() {
    System.out.println("nILC) Insert an executive to the left of the chairpersonnILE) Insert an executive to the left of a given executivenIRE) Insert an executive to the right of a given executivenRTE) Remove Target Executive");
    System.out.println("RBC) Remove By CorporationnPBC) Print By CorporationnPCC) Print all in counter-clockwise ordernPCL) Print all in clockwise ordernEXT) Exit the programnnSelect a menu option: ");
}

}

最后,感谢任何以任何形式提供任何建议、建议或实际帮助的人。我知道人们在看到家庭作业问题时会因为某种原因而生气,因为他们认为学生是在要求他们"为我做家庭作业",但我不是在做这件事。我只是想要任何建议或提示,我并不是要求你帮我填空并解决所有问题(并不是说我会反对:P)。谢谢

在removeByCorporation方法中,您只是将executive设置为null,但考虑到这是一个双链表,您不认为需要设置上一个和下一个executive的引用,这样双链表就不会断开。

诀窍是确保在每次操作中,都更新正在更改的项和引用它的另外两个项(在双链接列表中,引用它的两个也是它引用的两个)。

检查你的每种方法,并确保在每种方法中,每次更改都更新4个字段——主题中有两个,从主题链接的两个字段中各有一个。

相关内容

  • 没有找到相关文章

最新更新