2017-03-09 21 views
-3

我正在做一个地址簿作为学校作业的一部分,我主要是想通了一下,但我被困在一个部分。这是我的代码第一。我有一个AddressBook类,它包含变量和适当的getter和setter方法来更改/返回书中每个人的信息。然后我有一个TestAddressBook类和一个方法main来演示如何处理书籍的作品。我坚持的唯一的事情就是最终的要求,我被要求比较两个名字,看看它们是否相等。这是类的代码。比较地址簿程序中的名字

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和set方法,创建一个比较方法compareNames(name1,name2),它比较str的第一个,中间和最后一个名字名字1和名字2。假定名称1和名称2遵循以下格式:“名字M.姓氏”。“

该任务要求将两个字符串进行比较,并按照”罗伯特·J·史密斯和布鲁斯·A·卡特“等同的名字。“任何人都可以帮忙吗?

+0

添加它。 Java的。抱歉! – ripp2k

+0

为什么学校是废话*创建一个比较方法compareNames(name1,name2)*有一个接口为这个'比较器'停止教人们如何做错事的方式......用方法引用和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以获取组合方式,或你可以先连接字符串,然后比较那个...比较器将返回0,等于 – xenoterracide

回答

-1

要比较两个字符串的内容,只需要使用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

它是一个比较器,它允许你比较没有区分大小写的字符串,当你将unicode添加到混合中时,presumbably不会以令人惊讶的方式表现,这只是对lowCase可能做的事情,因为当处理unicode时,case不是布尔值。 – xenoterracide

0

我刚刚意识到没有请求排序在这里......所以,简单的答案是,占空

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 
} 

你的规范没有考虑是否Susan Anne PetersonSusan Alice Peterson应该是同一人(如果他们串的中间名,这意味着这通过缩短它)。使用Objects.equals,因为它是无效的。

可以说,如果这是真的,你想要的域名等效,你实际上应该在AddressBook实施equalshashCode,正确的方式做到这一点看this article on equality。如果您决定实现平等,那么你可以验证它的正确性与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

首先,让我们来格式化名字变成“名字MiddleInitial。姓氏”,这样他们可以很容易地进行比较。 这可以用下面的代码来完成:

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

对第二个条目重复此步骤,只更改变量名称。

现在,我们来比较两个字符串。这可以用一个简单的if语句来完成,如下面:

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

现在,你的代码,让我们把它变成一个方法。这可以通过以下方式完成:

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

在你的第二个代码片段中,使用'.charAt(0)'而不是'.chatAt(0)'我知道这只是一个错字,但只是为了帮助OP – Peake

+0

这很有道理!我如何使该方法成为AddressBook类的一部分,然后从我的TestAddressBook类中调用它。该任务以下面的形式请求一个方法:public static String compareNames(String name1,String name2) – ripp2k

+0

@Peake谢谢!我修复了它。 –