【问题标题】:Java - Passing Arrays in Methods, Variables Not RecognizedJava - 在方法中传递数组,变量无法识别
【发布时间】:2012-02-23 03:29:43
【问题描述】:

我已经坚持了好几天了,但我在这里把它分解了。我需要做的是创建一个帐户数组,每个帐户包含大约 9 个变量(AccountID、WithdrawlDates 等),用户可以在命令提示符中输入这些变量。从 createAccount() 方法中,我可以发送一个用户实例和一个 accountNum,但在接收 setAccount 方法上无法识别该用户。

代码如下:

class User{

   private int accountID;

   User( int id )
   {
       accountID = id;
   }

   static void setAccountID(User user[], int accountNum)
   {       
       user.accountID = accountNum; //accountID is not recognized here
   }
   static void getAccountID(User user){System.out.println(user.accountID);}
   }

class TestUser
{
   public static void main(String[] args)
   {       
      createAccount();
   }

   static void createAccount(){
       User[] user = new User[2];
       user[0] = new User(25);
       User.setAccountID(user, 2001); 
   }
}

我愿意改变这个流程,但我不知道从哪里开始。

谢谢!

【问题讨论】:

    标签: java arrays class methods


    【解决方案1】:

    要访问数组的元素而不是对数组本身进行操作,您可以使用方括号,如下所示:

    user[userIndex]
    

    从那里你可以像这样改变元素

    user[userIndex] = new User(id);
    

    或者像这样访问/修改元素本身的一些东西

    user[userIndex].accountID = whatever;
    

    此外,您在 setAccountID 中使用 static 令人困惑。静态方法无法知道关于 accountID 的任何信息,因为 accountID 是唯一创建的对象的一部分,其中静态方法属于该类,而不是任何特定对象。如果由于某种原因它必须是静态的,则需要将方法更改为如下所示

    static void setAccountID(User user[], int userIndex, int accountNum)
    {       
       user[userIndex].accountID = accountNum;
    }
    

    但以下内容会更好,因为无论如何您都知道数组中的用户:

    void setAccountID(int accountNum)
    {       
       this.accountID = accountNum;
    }
    

    这样称呼:

    user[userIndex].setAccountID(accountNum);
    

    【讨论】:

      【解决方案2】:

      没有理由传递User 对象的数组。试试这个:

      class User{
      
         private int accountID;
      
         User( int id )
         {
             accountID = id;
         }
      
         static void setAccountID(User user, int accountNum)
         {       
             user.accountID = accountNum; //accountID is not recognized here
         }
         static void getAccountID(User user){System.out.println(user.accountID);}
         }
      
      class TestUser
      {
         public static void main(String[] args)
         {       
            createAccount();
         }
      
         static void createAccount(){
             User user = new User(25);
             User.setAccountID(user, 2001); 
         }
      }
      

      编辑:如果您需要像@Luiggi Mendoza 在他的评论中建议的那样维护一组用户,只需将单个数组元素传递给setAccountID()

      static void createAccount(){
         User[] user = new User[2];
         user[0] = new User(25);
         User.setAccountID(user[0], 2001); // set id for first User
      }
      

      【讨论】:

      • 他不需要发送User数组,但需要维护整个程序的数组。
      • @LuiggiMendoza - 也许是这样。我添加了一个关于如何处理的建议。
      • 我确实需要将帐户数组保存在某个地方。
      • 如果 'User' 数组没有发送到 'setAccountID()' 方法,那么整个程序的数组在哪里维护?
      • @user1227370 - 由于您的大部分代码都是静态的,因此我建议在 TestUser 类中使用静态变量。然后,您可以将受调用影响的用户索引传递给setAccountID(或任何其他方法),它可以索引到数组中。不过,一般来说,这有点糟糕的设计。最好将setAccountID 设为User 类的实例方法,然后可以使用users[0].setAccountID(newID); 之类的方法调用它。
      猜你喜欢
      • 2021-01-06
      • 2018-11-12
      • 2020-06-15
      • 1970-01-01
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      • 2018-06-23
      • 2016-07-29
      相关资源
      最近更新 更多