【问题标题】:Java - Reading from several objectsJava - 从多个对象中读取
【发布时间】:2016-06-17 12:36:35
【问题描述】:

我正在尝试创建一个基本的 AddressBook,但对于如何让 AddressBook 类从 Main() 中创建的两个对象中读取数据感到有些困惑。

我创建了一个 compareNames() 方法,但是您可以看到它不起作用。读取两个条目名称的方法是什么?我需要创建一个新的临时变量来存储名称吗?

这是我目前所拥有的:

import java.util.Scanner;
class AddressBookDemo {

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

    AddressBook name1 = new AddressBook("firstName", "middleName", "lastName", "homeAddress", "businessPhone",
            "homePhone", "cellPhone", "skypeId", "facebookId", "personalWebSite");
    AddressBook name2 = new AddressBook("firstName", "middleName", "lastName", "homeAddress", "businessPhone",
            "homePhone", "cellPhone", "skypeId", "facebookId", "personalWebSite");

    System.out.print("First name: ");
    name1.setFirstName(sc.nextLine());
    System.out.print("Middle name: ");
    name1.setMiddleName(sc.nextLine());
    System.out.print("Last name: ");
    name1.setLastName(sc.nextLine());
    System.out.print("Home address: ");
    name1.setHomeAddress(sc.nextLine());
    System.out.print("Business phone number: ");
    name1.setBusinessPhone(sc.nextLine());
    System.out.print("Home phone number: ");
    name1.setHomePhone(sc.nextLine());
    System.out.print("Cell phone number: ");
    name1.setCellPhone(sc.nextLine());
    System.out.print("Skype ID: ");
    name1.setSkypeId(sc.nextLine());
    System.out.print("Facebook ID: ");
    name1.setFacebookId(sc.nextLine());
    System.out.print("Personal Website: ");
    name1.setPersonalWebSite(sc.nextLine());

    System.out.println("==============================");

    System.out.print("First name: ");
    name2.setFirstName(sc.nextLine());
    System.out.print("Middle name: ");
    name2.setMiddleName(sc.nextLine());
    System.out.print("Last name: ");
    name2.setLastName(sc.nextLine());
    System.out.print("Home address: ");
    name2.setHomeAddress(sc.nextLine());
    System.out.print("Business phone number: ");
    name2.setBusinessPhone(sc.nextLine());
    System.out.print("Home phone number: ");
    name2.setHomePhone(sc.nextLine());
    System.out.print("Cell phone number: ");
    name2.setCellPhone(sc.nextLine());
    System.out.print("Skype ID: ");
    name2.setSkypeId(sc.nextLine());
    System.out.print("Facebook ID: ");
    name2.setFacebookId(sc.nextLine());
    System.out.print("Personal Website: ");
    name2.setPersonalWebSite(sc.nextLine());
    } // end of Main
} // End of class AddressBookDemo

还有

import java.util.Scanner;
public class AddressBook {

Scanner sc = new Scanner(System.in);

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

// Declare public variables
public AddressBook(String firstName, String middleName, String lastName, String homeAddress, String businessPhone,
        String homePhone, String cellPhone, String skypeId, String facebookId, String personalWebSite) {
    this.firstName = firstName;
    this.middleName = middleName;
    this.lastName = lastName;
    this.homeAddress = homeAddress;
    this.businessPhone = businessPhone;
    this.homePhone = homePhone;
    this.cellPhone = cellPhone;
    this.skypeId = skypeId;
    this.facebookId = facebookId;
    this.personalWebSite = personalWebSite;

}

// public AddressBook(String firstName){
// this.firstName = firstName;
// }
//
// public AddressBook(String firstName, String middleName){
// this.firstName = firstName;
// this.middleName = middleName;
// }
//
// public AddressBook(String firstName, String middleName, String lastName){
// this.firstName = firstName;
// this.middleName = middleName;
// this.lastName = lastName;
// }

// Setters & Getters
public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getFirstName() {
    return firstName;
}

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

public String getMiddleName() {
    return middleName;
}

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

public String getLastName() {
    return lastName;
}

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

public String getHomeAddress() {
    return homeAddress;
}

public void setBusinessPhone(String businessPhone) {
    boolean invalidInput = false;
    do {
        this.businessPhone = sc.nextLine();
        invalidInput = false;
        try {
            long l = Long.parseLong(businessPhone.trim());
        } catch (NumberFormatException nfe) {
            invalidInput = true; // Test for invalid input
            System.out.println("NumberFormatException: Enter only numbers.");
        }
    } while (invalidInput == true);
}

public String getBusinessPhone() {
    return businessPhone;
}

public void setHomePhone(String homePhone) {
    boolean invalidInput = false;
    do {
        this.homePhone = sc.nextLine();
        invalidInput = false;
        try {
            long l = Long.parseLong(homePhone.trim());
        } catch (NumberFormatException nfe) {
            invalidInput = true; // Test for invalid input
            System.out.println("NumberFormatException: Enter only numbers.");
        }
    } while (invalidInput == true);
}

public String getHomePhone() {
    return homePhone;
}

public void setCellPhone(String cellPhone) {
    boolean invalidInput = false; // Test for invalid input
    do {
        this.cellPhone = sc.nextLine();
        invalidInput = false;
        try {
            long l = Long.parseLong(cellPhone.trim());
        } catch (NumberFormatException nfe) {
            invalidInput = true; // Test for invalid input
            System.out.println("NumberFormatException: Enter only numbers.");
        }
    } while (invalidInput == true);
}

public String getCellPhone() {
    return cellPhone;
}

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

public String getSkypeId() {
    return skypeId;
}

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

public String getFacebookId() {
    return facebookId;
}

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

public String getPersonalWebSite() {
    return personalWebSite;
}

// Compare names
public static String compareNames(String name1, String name2) {

    String comp1 = name1.getfirstName() + " " + name1.getMiddleName().toUpperCase().charAt(0) + ". "
            + name1.getLastName();
    String comp2 = name2.getFirstName() + " " + name2.getMiddleName().toUpperCase().charAt(0) + ". "
            + name2.getLastName();
    System.out.println("Comparing: " + comp1 + " and " + comp2);
    if (comp1.equalsIgnoreCase(comp2)) {
        System.out.println("The names match!");
    } else {
        System.out.println("The names don't match!");
    } // end if/else statement
}

} // end of class AddressBook

【问题讨论】:

  • 你的 Demo 课程到底应该做什么?
  • 您需要在演示课中进行比较。
  • 在main方法的末尾添加:AddressBook.compareNames(name1, name2);
  • 这是我们被指示执行的格式。他们不想将所有内容都放在一个 .java 文件中,而是需要一个单独的文件来调用该类。

标签: java object main


【解决方案1】:
public static void compareNames(String name1, String name2) {

你可能是说

public static void compareNames(AddressBook name1, AddressBook name2) {

注意返回类型已更改为void。要将其恢复为 String,请考虑将 System.out.println 语句更改为 return 语句。

【讨论】:

  • 不一定。你可以做 compareNames(name1.firstName, name2.firstName)
  • 在这个方法的代码中有:name1.getFirstName()。它建议AddressBook
【解决方案2】:

看起来您想要一种方法来比较两个 AddressBook 实例。在 Java 中执行此操作的正确方法是让 AddressBook 实现 Comparable<AddressBook>,然后实现 compareTo(),如下所示:

public int compareTo(AddressBook other)
{
    //return -1 if this is smaller than other
    //return 1 if this is larger than other
    //return 0 if this is equal to other
}

您现在可以使用此方法将 AddressBook 的一个实例与另一个实例进行比较。另一个好处是您现在还可以使用Collections.sort() 对地址簿列表进行排序。

【讨论】:

    【解决方案3】:

    您试图在Strings 上调用getFirstName()getMiddleName()getLastName(),这是没有意义的,因为String 没有这些方法。只有您的 AddressBook 类可以。您应该将 AddressBook 的实例传递给 compareNames() 方法:

    // Compare names
    public static String compareNames(AddressBook name1, AddressBook name2) {
        ...
    }
    

    然后你可以通过main 调用它,比如:

    AddressBook.compareNames(name1, name2);
    

    更好的是,您可以将compareNames 设为非静态,然后传入一个AddressBook 以与this 进行比较:

    // Compare names
    public String compareNames(AddressBook other) {
    
        String comp1 = this.getfirstName() + " " + this.getMiddleName().toUpperCase().charAt(0) + ". "
                + this.getLastName();
        String comp2 = other.getFirstName() + " " + other.getMiddleName().toUpperCase().charAt(0) + ". "
                + other.getLastName();
        System.out.println("Comparing: " + comp1 + " and " + comp2);
        if (comp1.equalsIgnoreCase(comp2)) {
            System.out.println("The names match!");
        } else {
            System.out.println("The names don't match!");
        } // end if/else statement
    }
    

    然后您可以从main 拨打电话,例如:

    name1.compareNames(name2);
    

    另外,您的 compareNames 方法说它返回 String,但它没有返回任何内容。要么它需要返回一个String,要么将返回类型更改为void

    【讨论】:

      猜你喜欢
      • 2013-04-06
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多