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