【问题标题】:Adding multiple instances of another class into a LinkedList将另一个类的多个实例添加到 LinkedList
【发布时间】:2014-10-22 16:17:54
【问题描述】:

我正在尝试创建银行记录列表。每条记录由名字、姓氏、电话号码和余额组成。在第一个类中,我向用户询问此信息,然后创建记录类的新实例以添加到列表中。但是,当我添加更多记录时,它会将所有记录替换为最新记录,您可以使用我的 showAllRecords() 方法看到。我该如何解决这个问题?

主类中的 add 和 showAllRecords 方法。这些方法是从 main 方法中的 switch 语句调用的:

private static void showAllRecords() 
{
    if(records.bankRecords.size() == 0)
        System.out.println("There are no records.");
    else
        for (int i = 0; i < records.bankRecords.size(); i++)
        {
            System.out.println(records.bankRecords.get(i));
        }

}

private static void add() 
{
    Scanner scan = new Scanner(System.in);

    System.out.print("Please enter the first name: ");
    String firstName = scan.next();
    System.out.print("Please enter the last name: ");
    String lastName = scan.next();
    System.out.print("Please enter the phone number: ");
    String phoneNumber = scan.next();
    System.out.print("Please enter the balance: ");
    int balance = scan.nextInt();

    bankRecords.add(new records(firstName, lastName, phoneNumber, balance));
}

记录类

public class records 
{   
public static String firstName;
public static String lastName;
public static String phoneNumber;
public static int balance;

LinkedList<records> bankRecords = new LinkedList<records>();

public records(String tFirstName, String tLastName, String tPhoneNumber, int tBalance)
{
    firstName = tFirstName;
    lastName = tLastName;
    phoneNumber = tPhoneNumber;
    balance = tBalance;
}
}

【问题讨论】:

  • 可以分享records的全部源码吗?
  • Records 字段是静态的吗?
  • 我们只被允许使用 LinkedList 来分配 user2494817
  • 您提供的代码没有解释您描述的问题。除了这些类的其余部分,您如何确定记录是被替换而不是被添加?
  • 从类属性中去掉static关键字。

标签: java object linked-list


【解决方案1】:

出现问题是因为records 类中的所有字段都是static。从字段声明中删除 static 关键字。因为它们是static,所以每当您创建records 类的新对象时,您就会覆盖那些static 字段。

静态字段属于类而不属于对象。

【讨论】:

    【解决方案2】:
    1. 删除您在记录类中声明的 LinkedList 实例。你为什么这样做。在你的主类中声明它并尝试使用我认为在你的情况下更好的 ArrayList 。原因是记录有静态字段
    2. 为什么您的班级名称以小写字母开头。这是一种非常非常糟糕的做法。

    【讨论】:

    • 这都是真的,但它没有回答问题。因此它应该是一个评论。
    【解决方案3】:

    你有一个固有的计划问题。

    实体“银行记录”(如您所说,包括姓名、余额等)与实体“银行记录列表”(包括可变数量的银行记录)之间存在差异.

    您的“记录”类(请在类名的开头使用大写字母)试图混合使用两者。所以你有一个记录和一个列表。您应该将这两个实体分开。然后创建一个新的“Record”,并将其添加到“ListOfBankRecords”对象中。

    此外,您似乎同时拥有一个变量和一个名为“记录”的变量。这也是为什么大写字母会很好的原因。你不应该有一个与类同名的变量。

    【讨论】:

      猜你喜欢
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多