2017-06-24 22 views
-2

配列リストで何を探しているのか表示されている問題があります。配列を検索すると情報が見つかりますが、リスト全体が漁師という名前のすべてのオブジェクトに表示されます。それはアイテムを検索し、見つかった場合は私が望むアイテムを印刷しますが、それは漁師のすべてのインスタンスを出力します。しかし、検索は厄介で、場合によってはうまくいきません。だから、私は適切な検索とその検索の出力を行うには、検索機能のヘルプが必要です。 「漁師」から各漁師の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(); 
      }    
     } 
    } 
} 

ここに出力します。あなたが "123"を検索したときにわかるように、それは全体のリストを返しました。そして、 "456"を検索したとき、それは "その漁師と一致しません"と言いました。

Main Menu 
    (1) Fisherman Menu 
    (2) Tournament Menu 
    (3) Fish Menu 
    (4) Close Tournament 
    (5) Quit Program 
    Selection: 1 

    Fisherman Menu 
    (1) Register New Fisherman 
    (2) Search Fisherman 
    (3) Return to Main Menu 
    Selection: 1 
    Enter First Name: Matt 
    Enter Last Name: P 
    Enter Phone Number...ie 904-560-7896: 123 
    Enter SSN...ie 123-45-6789: 123 
    Enter email address: 123 

    [fisherman{SSN=123, firstName='Matt', lastName='P', phoneNumber='123', emailAddress='123'}] 

    Fisherman Menu 
    (1) Register New Fisherman 
    (2) Search Fisherman 
    (3) Return to Main Menu 
    Selection: 1 
    Enter First Name: Joe 
    Enter Last Name: K 
    Enter Phone Number...ie 904-560-7896: 456 
    Enter SSN...ie 123-45-6789: 456 
    Enter email address: 456 

    [fisherman{SSN=123, firstName='Matt', lastName='P', phoneNumber='123', emailAddress='123'}, fisherman{SSN=456, firstName='Joe', lastName='K', phoneNumber='456', emailAddress='456'}] 

    Fisherman Menu 
    (1) Register New Fisherman 
    (2) Search Fisherman 
    (3) Return to Main Menu 
    Selection: 2 
    Enter Social Security Number of fisherman to search for below. 
    SSN: 123 
    [fisherman{SSN=123, firstName='Matt', lastName='P', phoneNumber='123', emailAddress='123'}, fisherman{SSN=456, firstName='Joe', lastName='K', phoneNumber='456', emailAddress='456'}] 

    Fisherman Menu 
    (1) Register New Fisherman 
    (2) Search Fisherman 
    (3) Return to Main Menu 
    Selection: 2 
    Enter Social Security Number of fisherman to search for below. 
    SSN: 456 
    No match for that fisherman 

    Fisherman Menu 
    (1) Register New Fisherman 
    (2) Search Fisherman 
    (3) Return to Main Menu 
    Selection: 
+0

ここでの小さな提案:Javaの規約では、レガシーコードまたはマシン生成コードを除き、識別子に "$"を使用することを推奨していません。 Java言語仕様[ここ](https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.8) –

答えて

0

あなたは全体のリストですfishermen.toString()を印刷しているためです。

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

変更fisherman.toString()代わり

EDIT印刷する以上:あなたは、ループ内の各漁師のために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(); 
} 
+0

でこれについて読んでください。 '(漁師。 toString()) 'を' '(fisherman)'だけにして、入力したものや探していたものだけを表示します。しかし、私はまだ "456"を検索するためのリターンを得ていないし、 "その漁師のための一致なし"にまっすぐに実行されますが、 "123"を検索するとうまくいきます。 –

+0

@MatthewPhaneufこれはあなたが各漁師に 'if-else'を使っているからです。修正するために私の答えを更新しました。それをチェックしてお知らせください。 –

0
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 + ")"; 
     } 
    } 
} 
+0

あなたのコードにあなたのメソッドを深く再帰的に。 System.out.println(obj)はすでにtoStringを実行しているので、System.out.println(obj.toString())を記述する必要はありません。私はstdを使用しないので、塩の穀物でそれを取る。 – Tim

0

ありがとうございました。数時間後に新鮮な目とあなたのコメントを見て、私はその問題を見ることができました。私は44行目と56行目のコードを(fishermen.toString())から(fisherman)に変更し、毎回すべての漁師を印刷するという問題を修正しました。また、else文をforループの外側にある単一のprint文に変更しました。これにより、最初の漁師だけでなく、リスト全体を検索できるようになりました。「その漁師には一致しません」と印刷されました。

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(); 
    }