Java - Передача массивов в методы, переменные не распознаются - PullRequest
0 голосов
/ 23 февраля 2012

Я застрял на этом в течение нескольких дней, но я сломал его здесь.Мне нужно создать массив учетных записей с примерно 9 переменными (AccountID, WithdrawlDates и т. Д.), Которые пользователь может ввести в командной строке.Из метода createAccount () я могу отправить экземпляр user и 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); 
   }
}

Я открыт для изменения этого процесса, но я не знаю, с чего начать.

Спасибо!

Ответы [ 2 ]

1 голос
/ 23 февраля 2012

Чтобы получить доступ к элементам массива вместо того, чтобы что-то делать с самим массивом, вы используете квадратные скобки, например:

user[userIndex]

оттуда вы можете изменить элемент как этот

user[userIndex] = new User(id);

или получить доступ / изменить что-то о самом элементе, как этот

user[userIndex].accountID = whatever;

Кроме того, использование статического в setAccountID сбивает с толку. Статический метод не может ничего знать об 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);
1 голос
/ 23 февраля 2012

Нет причин передавать массив из 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
}
...