2017-03-09 7 views
-3

私は学校の課題の一部としてアドレス帳をやっていますが、私はそれを大部分は理解していますが、私は一部に固執しています。ここに私のコードがあります。私は変数を含むAddressBookクラスを持っていて、本の中の各人物の情報を変更/返すための適切なgetterメソッドとsetterメソッドを持っています。次に、私は、本の作業に取り組む方法を示すメソッドmainを持つTestAddressBookクラスを持っています。私が立ち往生している唯一のことは、最終的な要件です。ここでは、2つの名前を比較し、それらが等しいかどうかを確認するよう求められます。ここにクラスのコードがあります。アドレス帳プログラムの名前の比較

public class AddressBook { 

private String firstName; 
private String middleName; 
private String lastName; 
private String homeAddress; 
private String homePhone; 
private String cellPhone; 
private String businessPhone; 
private String skypeId; 
private String facebookId; 
private String personalWebSite; 

public AddressBook(String firstName, String middleName, String lastName, 
        String homeAddress, String homePhone, String cellPhone, 
        String businessPhone, String skypeID, String facebookID, 
        String personalWebSite) { 

         this.firstName = firstName; 
         this.middleName = middleName; 
         this.lastName = lastName; 
         this.homeAddress = homeAddress; 
         this.homePhone = homePhone; 
         this.cellPhone = cellPhone; 
         this.businessPhone = businessPhone; 
         this.skypeId = skypeID; 
         this.facebookId = facebookID; 
         this.personalWebSite = personalWebSite; 
         } 

public String getFirstName() { 
    return firstName; 
} 

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

public String getMiddleName() { 
    return middleName; 
} 

public void setMiddleName(String middleName) { 
    this.middleName = middleName; 
} 

public String getLastName() { 
    return lastName; 
} 

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

public String getHomeAddress() { 
    return homeAddress; 
} 

public void setHomeAddress(String homeAddress) { 
    this.homeAddress = homeAddress; 
} 

public String getHomePhone() { 
    return homePhone; 
} 

public void setHomePhone(String homePhone) { 
    this.homePhone = homePhone; 
} 

public String getCellPhone() { 
    return cellPhone; 
} 

public void setCellPhone(String cellPhone) { 
    this.cellPhone = cellPhone; 
} 

public String getBusinessPhone() { 
    return businessPhone; 
} 

public void setBusinessPhone(String businessPhone) { 
    this.businessPhone = businessPhone; 
} 

public String getSkypeId() { 
    return skypeId; 
} 

public void setSkypeId(String skypeId) { 
    this.skypeId = skypeId; 
} 

public String getFacebookId() { 
    return facebookId; 
} 

public void setFacebookId(String facebookId) { 
    this.facebookId = facebookId; 
} 

public String getPersonalWebSite() { 
    return personalWebSite; 
} 

public void setPersonalWebSite(String personalWebSite) { 
    this.personalWebSite = personalWebSite; 
} 

public static String compareNames(String name1, String name2) { 

} 

}

そして、私のテストクラス...

public class TestAddressBook { 

public static void main(String[] args) { 

    System.out.println("ENTRY 1"); 

    AddressBook name1 = new AddressBook("Robert", "James", "Smith", "3 Fake St", 
             "222-321-8371", "222-423-2382", 
             "222-438-2918", "bob483", "bobfb493", 
             "http://www.freewebhost.com/bob848"); 

    System.out.println("First Name:  " + name1.getFirstName()); 
    System.out.println("Middle Name:  " + name1.getMiddleName()); 
    System.out.println("Last Name:  " + name1.getLastName()); 
    System.out.println("Address:   " + name1.getHomeAddress()); 
    System.out.println("Home Phone:  " + name1.getHomePhone()); 
    System.out.println("Cell Phone:  " + name1.getCellPhone()); 
    System.out.println("Business Phone: " + name1.getBusinessPhone()); 
    System.out.println("Skype ID:   " + name1.getSkypeId()); 
    System.out.println("Facebook ID:  " + name1.getFacebookId()); 
    System.out.println("Personal Website: " + name1.getPersonalWebSite()); 

    System.out.println("\nENTRY 2"); 

    AddressBook name2 = new AddressBook("Bruce", "Allan", "Carter", "56 Outtamy Way", 
             "564-342-8372", "564-283-9832", 
             "564-293-3489", "brucie392", "brucieface28", 
             "http://www.freewebhost.com/carteristheman"); 

    System.out.println("First Name:  " + name2.getFirstName()); 
    System.out.println("Middle Name:  " + name2.getMiddleName()); 
    System.out.println("Last Name:  " + name2.getLastName()); 
    System.out.println("Address:   " + name2.getHomeAddress()); 
    System.out.println("Home Phone:  " + name2.getHomePhone()); 
    System.out.println("Cell Phone:  " + name2.getCellPhone()); 
    System.out.println("Business Phone: " + name2.getBusinessPhone()); 
    System.out.println("Skype ID:   " + name2.getSkypeId()); 
    System.out.println("Facebook ID:  " + name2.getFacebookId()); 
    System.out.println("Personal Website: " + name2.getPersonalWebSite()); 

    System.out.println("\nENTRY 3"); 

    AddressBook name3 = new AddressBook("Susan", "Anne", "Peters", "6 Madeup Blvd", 
             "736-453-1238", "736-392-2385", 
             "736-926-2439", "anniep", "susananne", 
             "http://www.freewebhost.com/Susanspage"); 

    System.out.println("First Name:  " + name3.getFirstName()); 
    System.out.println("Middle Name:  " + name3.getMiddleName()); 
    System.out.println("Last Name:  " + name3.getLastName()); 
    System.out.println("Address:   " + name3.getHomeAddress()); 
    System.out.println("Home Phone:  " + name3.getHomePhone()); 
    System.out.println("Cell Phone:  " + name3.getCellPhone()); 
    System.out.println("Business Phone: " + name3.getBusinessPhone()); 
    System.out.println("Skype ID:   " + name3.getSkypeId()); 
    System.out.println("Facebook ID:  " + name3.getFacebookId()); 
    System.out.println("Personal Website: " + name3.getPersonalWebSite()); 






} 

}

割り当ては、このために求めている...

「GETを使用して設定メソッドを使用して、比較メソッドcompareNames(name1、name2)を作成します。これは、strの最初、中、最後の名前ings name1とname2です。 name1とname2は、 "FirstName M. LastName"の形式に従うものとします。 "

この割り当てでは、2つの文字列を比較し、" Robert J. SmithとBruce A. Carterの行に沿って何かを返す必要があります。

+0

追加されました。 Java。ごめんなさい! – ripp2k

+0

なぜ学校は駄目なのですか*比較メソッドの作成compareNames(name1、name2)*このComparatorのインターフェースは、メソッド参照やComparator.comparingを使って、人々に間違ったやり方を教えるのをやめます... https: //docs.oracle.com/javase/8/docs/api/java/util/Comparator.html – xenoterracide

+0

結合方法については、9 http://www.baeldung.com/java-8-sort-lambdaを参照してください。最初に文字列を連結して比較することができます。コンパレータは030を返します。 – xenoterracide

答えて

-1

2つの文字列の内容を比較するには、string1.equals(string2);を使用します。これは、ブール値を返します。文字列を最初にクリーニングすることができます。文字列上で.CASE_INSENSITIVE_ORDERという定数を呼び出すことで、小文字のフォームを呼び出すことができます。うまくいけば、これは助けてあまり与えることはありません。

+0

toLowerCaseを使用しないでください。[String.CASE_INSENSTIVE_ORDER](https://docs.oracle.com/javase/8/docs/)を使用してください。 api/java/lang/String.html#CASE_INSENSITIVE_ORDER) – xenoterracide

+0

@xenoterracideどうしますか? – Peake

+0

これは大文字と小文字を区別せずに文字列を比較できるようにするコンパレータです。ユニコードを扱うときは大文字ではないため、大文字小文字を区別することなく文字列を比較することができます。 。 – xenoterracide

0

私は、ここでのソートのための要求は...そう、最も単純な答えは、彼らがミドルネームをサブストリングかどうSusan Anne PetersonかとSusan Alice Petersonが、それはこのことを意味し、(同じ人物でなければなりませんためにあなたの仕様は考慮していないヌル

public boolean compareNames(AddressBook a, AddressBook b) { 
    if (a == null || b == null) { 
     return false; 
    } 

    return Objects.equals(a.getFirstname(), b.getFirstname()) 
      && Objects.equals(...); // fill in the rest 
} 

を占め、ありますそれを短縮することによって)。 Objects.equalsを使用するのはnull安全です。正しい方法は、それがthis article on equalityをご覧くださいする

おそらくこれが本当にしたいドメイン同値であれば、あなたは実際には、AddressBookequalshashCodeを実装する必要があります。あなたは等号を実装することを決定した場合、あなたが比較/発注を望んでいたいくつかの理由であれば、あなたはケースには、EqualsVerifier

とその正しさを確認することができ小文字を区別しないヌル安全な方法

Comparator<String> nsci =Comparator.nullsFirst(String.CASE_INSENSTIVE_ORDER) 
return Comparator.comparing(AddressBook::getFirstName, nsci) 
    .thenComparing(AddressBook::getMiddleName, nsci) 
    .thenComparing(AddressBook::getLastName, nsci).compareTo(address1, address2); // if 0 they are equal 
0

すべての最初に、フォーマットしてみましょう"Firstname MiddleInitial。Lastname"に名前を入力すると、簡単に比較できます。 これは、次のコードで行うことができます。

//Get each part of the name: 
String firstname1 = entry1.getFirstName(); 
String middleInitial1 = entry1.getMiddleName().charAt(0); 
String lastname1 = entry1.getLastName(); 
//Combine them 
String fullname1 = firstname + " " + middleInitial + ". " + lastname; 

あなたは、これはよりコンパクトになりたかった場合は、行を結合できます。

String fullname1 = entry1.getFirstName() + " " + entry1.getMiddleName().chatAt(0) + ". " + entry1.getLastName(); 

ちょうど変数名を変更し、2番目のエントリに対してこの手順を繰り返します。

ここで、2つの文字列を比較しましょう。今、あなたは、コードを持っていること、のは、メソッドにそれを作ってみよう

if (fullname1.equalsIgnoreCase(fullname2) { 
    System.out.println(fullname1 + " is equal to " + fullname2); 
} else { 
    System.out.println(fullname1 + " is not equal to " + fullname2); 
} 

:これは、以下のような簡単なif文で行うことができます。これは次のようにして行うことができます:

public static String (AddressBook entry1 AddressBook entry2) { 
    String fullname1 = entry1.getFirstName() + " " + entry1.getMiddleName().charAt(0) + ". " + entry1.getLastName(); 
    String fullname2 = entry1.getFirstName() + " " + entry1.getMiddleName().charAt(0) + ". " + entry1.getLastName(); 
    if (fullname1.equalsIgnoreCase(fullname2) { 
     return fullname1 + " is equal to " + fullname2; 
    } else { 
     return fullname1 + " is not equal to " + fullname2; 
    } 
} 
+0

2番目のコードスニペットで' .charAt(0) 'を使用しない' .chatAt(0) 'それはちょうどタイプミスだとわかりますが、OPを手助けするだけです – Peake

+0

これは意味があります!どのようにして正確にそのメソッドを私のAddressBookクラスの一部にしてから、それを私のTestAddressBookクラスから呼び出すでしょう。代入は以下の形式でメソッドを要求します:public static String compareNames(String name1、String name2) – ripp2k

+0

@Peakeありがとう!私はそれを修正しました。 –

関連する問題