首页 > 解决方案 > 调用函数的按钮导致被调用函数的参数变为空?

问题描述

在我为搜索输入文件而创建的函数中,我很难确定我认为是某种逻辑错误。

该函数接受一个字符串,然后在第一次运行时像平常一样搜索文件。之后,该值变为空白(没有任何代码这样做)并且搜索找不到匹配项。这是有问题的功能:

public String searchByName(String str) {
    String value = str.trim().replace(" ", "");
    String st = "\nResults:\n";

    for (SeaPort port:ports) {
        if (port.name.equalsIgnoreCase(value)) {
            st += "\nPort: " + port.name + " " + port.index;
        }
        ArrayList<Dock> docks = port.getDocks();
        for (Dock dock:docks) {
            if (dock.name.equalsIgnoreCase(value)) {
                st += dock.toString();
            }
        }
        ArrayList<Person> persons = port.getPersons();
        for (Person person:persons) {
            if (person.name.equalsIgnoreCase(value)) {
                st += person.toString();
            }
        }
        ArrayList<Ship> ships = port.getShips();
        for (Ship ship:ships) {
            if (ship.name.equalsIgnoreCase(value)) {
                st += ship.toString();
            }
        }
    }

    return st;

}

此外,这里是调用上述按钮的动作侦听器背后的函数:

public void searchFile() {
    if (file == null) {
        textArea.append("\nCannot search. Please select a file first.");
    } else {
        world = new World(sc);

        String term = textField.getText();
        String selection = (String) searchOptions.getSelectedItem();

        switch (selection) {
        case "Index":
            int i;
            try {
                i = Integer.parseInt(term);
                textArea.append("\nSearching for " + i + " by " + selection + "\n\n");
                textArea.append(world.searchByIndex(i));

            } catch (NumberFormatException e) {
                textArea.append("\nError with input. Number required to search ID");
            }
            break;
        case "Type":
            textArea.append("\nSearching for " + term + " by " + selection + "\n\n");
            textArea.append(world.searchByType(term));
            break;
        case "Name":
            textArea.append("\nSearching for " + term + " by " + selection + "\n\n");
            textArea.append(world.searchByName(term));
            System.out.println(term);
            break;
        default:
            break;
        }
    }
}

我发现奇怪的是我的测试打印语句继续保存字符串,但不打印结果。这是连续按两次“搜索”后的屏幕截图: 在此处输入图像描述

我想不出是什么导致了这个问题。最初在开发所有三种方法时,我认为是 switch 语句导致了错误,所以我等待构建此方法,然后再进行进一步的故障排除。但是,此代码中有很多中断。问题可能是港口只有一个海港吗?

标签: javauser-interface

解决方案


推荐阅读