Java 函数数组列表搜索

Java 函数数组列表搜索,java,arrays,arraylist,Java,Arrays,Arraylist,在数组列表中显示我正在搜索的内容时出现问题。当我搜索数组时,它会找到信息,但它会打印整个列表,以处理所有命名为fisherman的对象。它将搜索该项目,如果找到,将打印我想要的项目,但它会打印渔民的所有实例。但是搜索很笨拙,在某些情况下不起作用。因此,我需要有关搜索功能的帮助,以便进行适当的搜索并输出该搜索。我不确定如何将对象名称从“fisherman”更改为每个fisherman的SSN,这将有助于搜索参数。但我想不出一个方法来改变每个渔民的对象名称。谢谢你能提供的任何帮助 public st

在数组列表中显示我正在搜索的内容时出现问题。当我搜索数组时,它会找到信息,但它会打印整个列表,以处理所有命名为fisherman的对象。它将搜索该项目,如果找到,将打印我想要的项目,但它会打印渔民的所有实例。但是搜索很笨拙,在某些情况下不起作用。因此,我需要有关搜索功能的帮助,以便进行适当的搜索并输出该搜索。我不确定如何将对象名称从“fisherman”更改为每个fisherman的SSN,这将有助于搜索参数。但我想不出一个方法来改变每个渔民的对象名称。谢谢你能提供的任何帮助

public static void fishermanMenu() {
    // declare variables and array
    int selection;
    String fName;
    String lName;
    String ssn;
    String number;
    String email;
    String searchSSN;
    String menuFisherman[] = {"Register New Fisherman", "Search Fisherman", "Return to Main Menu"};

    System.out.println("\nFisherman Menu");
    // for loop to print menu from array
    for(int i = 0, k = 1; i < menuFisherman.length; i++, k++) {
        System.out.println("("+ k + ") " + (menuFisherman[i]));    
    }
    System.out.print("Selection: ");
    selection = input.nextInt();
    input.nextLine();
    if (selection == 1) {       
        $Fisherman fisherman = new $Fisherman();
        fishermen.add(fisherman);

        System.out.print("Enter First Name: ");
        fName = input.next();
        fisherman.setFirstName(fName);

        System.out.print("Enter Last Name: ");
        lName = input.next();
        fisherman.setLastName(lName);

        System.out.print("Enter Phone Number...ie 904-560-7896: ");
        number = input.next();
        fisherman.setPhoneNumber(number);

        System.out.print("Enter SSN...ie 123-45-6789: ");
        ssn = input.next();
        fisherman.setSSN(ssn);

        System.out.print("Enter email address: ");
        email = input.next();
        fisherman.setEmailAddress(email);

        System.out.print(fishermen.toString());

        fishermanMenu();
    }

    else if (selection == 2) {
        System.out.println("Enter Social Security Number of fisherman to search for below.");
        System.out.print("SSN: ");
        searchSSN = input.nextLine();

        for ($Fisherman fisherman : fishermen) {
            if (fisherman.getSSN().equals(searchSSN)) {
                System.out.println(fishermen.toString());
                fishermanMenu();
            }
            else {
                System.out.println("No match for that fisherman");
                fishermanMenu();
            }               
        }
    }
}

这是因为您正在打印整个列表的
fishermen.toString()

System.out.println(fishermen.toString());
将上述内容改为打印
fisherman.toString()

编辑:

您正在为循环中的每个渔民使用
if-else
,您需要按照以下方式修复该问题:

int found = 0;
for ($Fisherman fisherman : fishermen) {
    if (fisherman.getSSN().equals(searchSSN)) {
        found = 1;
        System.out.println(fisherman);
        break;
    }
if (found == 0) {
    System.out.println("No match for that fisherman");
    fishermanMenu();               
}
else {
    found = 0;
    fishermanMenu();
}
公共类主{
私有静态列表allFisherpeople=new ArrayList();
公共静态void main(字符串…参数){
while(true){
打印菜单();
字符串选择=getInput();
如果(“1”。等于(选择)){
addFisherman();
}否则,如果(“2”。等于(选择)){
搜索渔民();
}否则{
System.out.println(“非有效选择:”+选择);
}
}
}
私有静态字符串getInput(){
试一试{
字符串=新字符串();
字符;
而((character=(char)System.in.read())!='\n')
字符串+=字符;
返回字符串;
}捕获(IOE异常){
抛出新的运行时异常(e);
}
}
私有静态void打印菜单(){
字符串menuFisherman[]={“注册新渔民”、“搜索渔民”、“返回主菜单”};
System.out.println(“\n谢尔曼菜单”);
for(int i=0;i
谢谢您的帮助。经过几个小时的观察和你的评论,我看到了问题所在。我将第44行和第56行的代码从
(fishermen.toString())
更改为
(fisherman)
,从而解决了每次打印所有渔民的问题。还将else语句更改为for循环外的单个print语句。这使得搜索可以遍历整个列表,而不仅仅是第一个渔民,然后再打印“该渔民不匹配”


这里有一个小建议:Java约定不鼓励在标识符中使用“$”,遗留代码或机器生成的代码除外。在Java语言规范中阅读关于它的内容——您对它的编码方式——您正在以递归方式深入到您的方法中。System.out.println(obj)已经在它上面做了一个toString,所以不需要写System.out.println(obj.toString())。我从来没有在中使用过std,所以对其中的任何一个都要加一点盐。我将
(fishermen.toString())
更改为
(fisherman)
,现在它只打印我想要输入或搜索的内容。然而,我仍然没有因为搜索“456”而得到回报,而是直接跑到“那渔夫的对手”那里,但在搜索“123”时效果很好。@MatthewPhaneuf这是因为你
int found = 0;
for ($Fisherman fisherman : fishermen) {
    if (fisherman.getSSN().equals(searchSSN)) {
        found = 1;
        System.out.println(fisherman);
        break;
    }
if (found == 0) {
    System.out.println("No match for that fisherman");
    fishermanMenu();               
}
else {
    found = 0;
    fishermanMenu();
}
public class Main {

    private static List<Fisherman> allFisherpeople = new ArrayList<Fisherman>();

    public static void main(String... args) {
        while (true) {
            printMenu();

            String selection = getInput();
            if ("1".equals(selection)) {
                addFisherman();
            } else if ("2".equals(selection)) {
                searchFishermen();
            } else {
                System.out.println("Not a vaild selection: " + selection);
            }
        }
    }

    private static String getInput() {
        try {
            String string = new String();
            char character;
            while ((character = (char) System.in.read()) != '\n')
                string += character;
            return string;
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    private static void printMenu() {
        String menuFisherman[] = { "Register New Fisherman", "Search Fisherman", "Return to Main Menu" };
        System.out.println("\nFisherman Menu");
        for (int i = 0; i < menuFisherman.length; i++) {
            System.out.println("(" + (i + 1) + ") " + (menuFisherman[i]));
        }
        System.out.print("Selection: ");
    }

    private static void addFisherman() {
        Fisherman fisherman = new Fisherman();
        System.out.print("Enter First Name: ");
        fisherman.setFirstName(getInput());
        System.out.print("Enter Last Name: ");
        fisherman.setLastName(getInput());
        System.out.print("Enter Phone Number...ie 904-560-7896: ");
        fisherman.setPhoneNumber(getInput());
        System.out.print("Enter SSN...ie 123-45-6789: ");
        fisherman.setSsn(getInput());
        System.out.print("Enter email address: ");
        fisherman.setEmail(getInput());
        System.out.print(fisherman);
        allFisherpeople.add(fisherman);
    }

    private static void searchFishermen() {
        System.out.println("Enter Social Security Number of fisherman to search for below.");
        System.out.print("SSN: ");
        String search = getInput();

        for (Fisherman fisherman : allFisherpeople) {
            if (fisherman.getSsn().equals(search)) {
                System.out.println("You must be looking for: " + fisherman);
            } else {
                System.out.println("No match for that fisherman");
            }
        }
    }

    private static class Fisherman {
        private String firstName;
        private String lastName;
        private String ssn;
        private String phoneNumber;
        private String email;

        public String getFirstName() {
            return firstName;
        }

        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }

        public String getLastName() {
            return lastName;
        }

        public void setLastName(String lastName) {
            this.lastName = lastName;
        }

        public String getSsn() {
            return ssn;
        }

        public void setSsn(String ssn) {
            this.ssn = ssn;
        }

        public String getPhoneNumber() {
            return phoneNumber;
        }

        public void setPhoneNumber(String phoneNumber) {
            this.phoneNumber = phoneNumber;
        }

        public String getEmail() {
            return email;
        }

        public void setEmail(String email) {
            this.email = email;
        }

        public String toString() {
            return firstName + " " + lastName + " (" + phoneNumber + ")";
        }
    }
}
    else if (selection == 2) {
        System.out.println("Enter Social Security Number of fisherman to search for below.");
        System.out.print("SSN: ");
        searchSSN = input.nextLine();

        for ($Fisherman fisherman : fishermen) {
            if (fisherman.getSSN().equals(searchSSN)) {
                System.out.println(fisherman);
                fishermanMenu();
            }
        }
        System.out.println("No match for that fisherman");
        fishermanMenu();
    }