在主类中使用方法设置对象值?

时间:2018-10-19 14:31:26

标签: java arrays methods

我试图用一种方法设置数组中对象的特定值。

public class BankAccount
{
private String name;

//constructor
public BankAccount(String firstName, String LastName)
{

name = firstName + " " + lastName;

}

public String getName()
{
return name;
}

以上是我的BankAccount班,还有另一个名为BankAccountList的班:

public class BankAccountList {
    public static void main(String args[]){

    BankAccount bankAccount[] = new BankAccount[2];

    bankAccount[1] = giveName("MR", "Travis");
    }

    public static void giveName (String firstName, lastName){

    }
}

如何使用以下BankAccount[1]方法将giveName()中的对象名称设置为“ Travis先生”?我不知道要使用给定参数在giveName中放入什么。任何提示将不胜感激。

5 个答案:

答案 0 :(得分:4)

您的$(this).closest("form").next(".comments").hide(); 方法应返回类型giveName

BankAccount

修改

仅声明public static BankAccount giveName (String firstName, String lastName){ return new BankAccount(firstName, lastName); } 不会填充数组中的任何条目(根据其他语言的经验,您可能希望这样做)。数组最初将为空,并且有多种填充方法:

在循环中,您可以:

  • 直接调用new BankAccount[]构造函数
  • 委托给另一个方法,该方法返回一个新的BankAccount(如上面的示例所示)

与大多数编程决策一样,此选择主要是个人喜好。对于具有2个字符串字段的简单DTO,委派给另一种方法可能会过大。

对于需要验证的更复杂的DTO,委托另一种方法可以将验证逻辑封装在易于测试的单个位置。

答案 1 :(得分:3)

这里有几件事值得一提。

首先,您似乎对静态和动态之间的差异没有完全的了解。这是可以理解的,因为即使我了解它是如何工作的,我现在仍然很难理解它。您的BankAccountList类具有main方法,该方法从静态标准main方法开始。您的bankAccount数组是在此main方法中定义的,这意味着它不存在于整个类中,仅存在于正在运行的main方法中。

然后,您要为列表中的银行帐户命名。在这里,您创建了另一个静态方法,该方法对您的main方法中的内容一无所知,并且不包含任何可以为其提供参数的对象。换句话说,您现在拥有的空函数无法为银行帐户设置任何参数,因为该方法中不存在银行帐户。

我建议使giveName方法动态化(这意味着只删除static关键字),然后将该方法移到BankAccount类中。然后,您将有效地使用名称的get和set方法,它们是动态的,这意味着它对于该类的每个对象实例均有效。之后,可以首先引用数组中的对象,然后直接在该特定对象上调用giveName()方法,该方法将设置名称:

public class BankAccount
{
    private String name;

//constructor
public BankAccount(String firstName, String LastName)
{

    name = firstName + " " + lastName;

}

public String getName()
{
    return name;
}

public void giveName (String firstName, String lastName){
    name = firstName + " " + lastName;
}

和:

public class BankAccountList {
    public static void main(String args[]){

        BankAccount bankAccount[] = new BankAccount[2];

        bankAccount[1].giveName("MR", "Travis");
    }
}

更新:

我现在注意到另一件事。创建数组的行:     BankAccount bankAccount [] =新的BankAccount [2];

这不会创建填充数组,而是会创建一个空数组。换句话说,您尚未创建带有银行帐户的列表,而是创建了可以保存银行帐户的列表。您必须先创建一个银行帐户,然后才能为其命名。

BankAccount bankAccount[] = new BankAccount[2];
bankAccount[1] = new BankAccount("MR", "Travis");

现在,您的构造函数在创建时已经具有用于给帐户命名的参数。因此,现在您实际上并不需要gemName方法。除非您以后想要更改它,否则:

bankAccount[1].giveName("MRS", "Davis");

答案 2 :(得分:2)

您实际上不需要使用giveName方法,您可以这样做:

bankAccount[1] = new BankAccount("MR", "Travis");

但是,如果您确实需要使用giveName方法来执行此操作,则可以这样做:

// change signature to return `BankAccount` object
public static BankAccount giveName (String firstName, String lastName){
    return new BankAccount(firstName, lastName);
}

并这样称呼它:bankAccount[1] = giveName("MR", "Travis");


如果您需要giveName作为void的返回类型,那么您需要传递数组以将BankAccount添加到方法内部,并将位置添加到该方法中。像这样:

// change in order to signature receive an array of `BankAccount`s and the position where it will be added
public static void giveName (String firstName, String lastName, BankAccount[] bankAccounts, int position) {
   bankAccounts[position] = new BankAccount(firstName, lastName);
}

然后这样称呼:giveName("MR", "Travis", bankAccount, 1);


附加说明

  • 记住数组位置从索引0开始,而不是1,因此您可能要考虑从0而不是1添加银行帐户,如下所示:
  • 如果giveNameBankAccountList类中,就是这种情况。否则,请继续KjetilNordin's answer

bankAccount[0] = giveName("MR", "Travis");

答案 3 :(得分:1)

您定义了一个包含 BankAccount 对象的数组,因此要使用 giveName() 函数向其中添加元素,您需要进行修改该功能如下:

public class BankAccountList {
    public static void main(String args[]){

    BankAccount bankAccount[] = new BankAccount[2];

    bankAccount[1] = giveName("MR", "Travis");
    }

    public static BankAccount giveName (String p_firstName,String p_lastName){
      return new BankAccount(p_firstName, p_lastName)
    }
}

答案 4 :(得分:1)

您需要set方法!

将此添加到BankAccount类:

public void setName(String firstName, String lastName) {
            this.name = firstName + " " + lastName;
}

,因此您应该调用setName而不是GiveName。像这样:

 bankAccount[1].setName(String firstName, String lastName)

另一件事,我建议您在对象的构造函数中使用set方法:

//constructor
public BankAccount(String firstName, String LastName)
{

   setName(String firstName, String lastName);

}