繁体   English   中英

双链表未显示我正在搜索的确切值

[英]Doubly LinkedList doesn't show the exact value I'm searching for

我正在使用 searchByName 方法在我的双向链表中搜索节点的确切值。 即使我传递了 LinkedList 中存在的值,它也不会显示我想要的数据。

public void searchByName(String param) throws Exception{
    Node currentNode = start;
    String theFirstName = currentNode.firstName.toLowerCase();
    String theLastName = currentNode.lastName.toLowerCase();
    param = param.toLowerCase();
    if (start == null) {
        throw new Exception("List Underflow");
    }else{
        String id= "Student ID", ln="Last Name", fn="First Name", course="Course", section="Section", yl="Year Level";
        System.out.format("%-10s\t%-10s\t%-10s\t%-5s\t%-10s\t%s", id, ln, fn, course, section, yl);
        System.out.println();
        while(currentNode.next != null){
            if (param == theFirstName || param == theLastName) {
                System.out.format("%-10s\t%-10s\t%-10s\t%-5s\t%-15s\t%d", currentNode.studentID, currentNode.lastName, currentNode.firstName, currentNode.course, currentNode.section, currentNode.yearLevel);
                System.out.println();
            }else{
                System.out.println("Not found");
                break;

            }
            currentNode = currentNode.next;
        }
        if (currentNode.next == null){
            System.out.format("%-10s\t%-10s\t%-10s\t%-5s\t%-15s\t%d", currentNode.studentID, currentNode.lastName, currentNode.firstName, currentNode.course, currentNode.section, currentNode.yearLevel);
            System.out.println();
        }

    }

我的主要功能:

public static void main(String[] args)  throws Exception {
 StudentRecord senators = new StudentRecord();
 senators.insertEnd("110007", "Lacson", "Ping", "BSCS", "BSCS-III-A", "Active",  3);
    senators.insertEnd("110008", "Angara", "Sonny", "BSCS", "BSCS-III-B", "InActive",  3);
  senators.searchByName("Lacson");
}

链接到要点: https : //gist.github.com/30b27d3612f95fc2ced99f50c4f23c14

更改节点时,您不会更新名字和姓氏。

此外,将字符串与等号进行比较,而不是 ==。

您的方法中有很多错误 2 个主要错误:

  1. 字符串应该与 equals 方法进行比较而不是 ==
  2. 你遍历列表的算法是错误的
  3. 始终使用您自己的异常 (LinkedListOutOfBoundsException)
  4. 不要在函数内部修改输入参数
  5. 不必要的 else 语句,因为它抛出。
  6. 最后一个 if 绝对没用。
  7. 尝试使用记录器
    public void searchByName(String param) throws LinkedListOutOfBoundsException {
        if (null == start) {
            throw new LinkedListOutOfBoundsException("List Underflow");
        }
        if (null == param) {
            throw new IllegalArgumentException("param must not be null");
        }

        Node currentNode = start;    
        while (currentNode != null) {
            if (param.equalsIgnoreCase(currentNode.firstName) 
                    || param.equalsIgnoreCase(currentNode.lastName)) {
                break;
            }
            currentNode = currentNode.next;
        }
        if (null == currentNode) {
            LOGGER.info("Not found");
        } else {
            LOGGER.info("Found {}", param);
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM