2016-04-15 2 views
0

Очень простой вопрос, но очень мало удачи.Возвращает null при вызове метода в другом классе

Моя проблема заключается в том, что при попытке позвонить по методам ПОЛУЧИТЬ getUserID и getPassword класса User в классе Login, я получаю нуль.

Я просмотрел другие сообщения с аналогичной проблемой, связанной с моим. Хотя я нашел несколько сообщений для руководства, общая проблема заключалась в том, что плакат не инициализировал объект класса, но я это сделал.

Мне нужен конкретный код здесь, потому что я пробовал много вещей, но не могу заставить его работать. Надеюсь, что я предоставил достаточно информации, чтобы помочь вам помочь мне.

класс пользователя

public class User 
{ 
private String userID; 
private String password; 
private Employee employee; 
private String authorityLevel; 
/** 
* Constructor for User class - Initialise a fixed password and employee object. 
*/ 
public User() 
{ 
    employee = new Employee(); 
    password = "password"; 
}  

/** 
* Create a user ID and print the user the details of their user account. 
*/ 
public void createUser(Employee employee) 
{ 
    // Combine staff ID with authority key to make the user ID. 
    userID = employee.getID() + "" + employee.getAuthorityLevel(); 

    // Check that there is a staff ID to create the user ID. 
    // It also ensures that an employee profile has been created before an attempt 
    // to make a user account. 
    if(employee.getID() == null){ 
     System.out.println("There are no Employee details to make a User with."); 
     System.out.println("Please enter the Employee details before you make a user"); 
    } 
    else{ 
     System.out.println("Your user ID is: "+userID); 
     System.out.println("Your user password is: "+password); 
    } 
}  

/** 
* @return The user ID. 
*/ 
public String getUserID() 
{ 
    return userID; 
} 

/** 
* @return The password. 
*/ 
public String getPassword() 
{ 
    return password; 
} 
} 

Я хочу, чтобы получить доступ к USERID и пароль геттер методов в классе пользователя для использования в Вход классе.

Войти класс

public class Login 
{ 
private User user; 
private boolean accessGranted; 
private String userID; 
private String password; 
private boolean loggedIn; 
private boolean loggedOut; 
/** 
* Constructor for the Login class - initialise a user object. 
*/ 
public Login() 
{ 
    user = new User(); 
} 

/** 
* Attempt to start a login session. 
*/ 
public void login(String userID,String password) 
{ 
    // Check that credentials entered are correct for the account the user wishes to log in to. 
    if((password == user.getPassword()) && (userID == user.getUserID())){ 
     accessGranted = true; 
     if((accessGranted == true) && (userID.contains("H"))){ 
      System.out.println("Your login session has started."); 
      System.out.println("You are now viewing Yuconz System as HR staff."); 
     } 
     if((accessGranted == true) && (userID.contains("D"))){ 
      System.out.println("Your login session has started."); 
      System.out.println("You are now viewing Yuconz System as Director staff."); 
     } 
     if((accessGranted == true) && (userID.contains("E"))){ 
      System.out.println("Your login session has started."); 
      System.out.println("You are now viewing Yuconz System as Employee staff."); 
     } 
     loggedIn = true; 
    } 
    else{ 
     System.out.println("ACCESS DENIED BRUTHA!"); 
    } 
}  

Один класс создает учетную запись пользователя, где только детали идент и пароль. Другой класс - это то, где пользователь может использовать данные этой учетной записи для входа в систему. В методе Loginlogin Я проверяю, что введенный ID и пароль соответствуют идентификатору и паролю учетной записи, к которой они пытаются получить доступ.

ответ

1

Кажется, что вы никогда не звоните public void createUser(Employee employee) на экземпляр пользователя.

SO

private String userID; в никогда не инициализируется ...

Попробуйте это:

public class User{ 

    private String userID; 
    private String password; 
    private Employee employee; 
    private String authorityLevel; 

    public User(Employee employee){ 
     this.employee = employee; 
     password = "password"; 
     createUser(); 
    }  

    private void createUser(){ 
     userID = employee.getID() + "" + employee.getAuthorityLevel(); 

     if(userID == null){ 
      System.out.println("There are no Employee details to make a User with."); 
      System.out.println("Please enter the Employee details before you make a user"); 
     }else{ 
      System.out.println("Your user ID is: "+userID); 
      System.out.println("Your user password is: "+password); 
     } 
    }  

    public String getUserID(){ 
     return userID; 
    } 

    public String getPassword(){ 
     return password; 
    } 
} 

Passing the Employee the the User's constructor is the best solution if you need an instance of Employee to creat a User.

Если у вас нет какой-либо экземпляр Employee Ваш логин, а просто id и a password, то вы можете изменить конструктор пользователя::

public class User{ 
    private String userID; 
    private String password; 
    private String authorityLevel; 

    public User(String userID, String password){ 
     this.userID = userID; 
     this.password = password;  
     checkUser(); 
    }  

    private void checkUser(){ 
     if(userID == null){ 
      System.out.println("There are no Employee details to make a User with."); 
      System.out.println("Please enter the Employee details before you make a user"); 
     }else{ 
      System.out.println("Your user ID is: " + userID); 
      System.out.println("Your user password is: " + password); 
     } 
    }  
    //... 
} 

Вы можете User в создании экземпляра в Login

public class Login 

    private User user; 

    public Login(){ 
    } 

    public void login(String userID,String password){ 
     user = new User(userID, password); 
     //... 

}

+0

Это подводит меня к другому вопросу, у меня был, прежде чем я изменил дизайн. Добавление paramater в конструкторе 'User' для выполнения объекта« Employee »означает, что когда я хотел инициализировать объект' User' в 'Login', я бы получил ошибку конструктора:« required: Employee found: no arguments ». Однако я не хочу брать объект в конструкторе 'Login', так как я хотел бы внедрить систему входа, которая принимает идентификатор и пароль. – AbiAik

+0

Итак, проверьте мое обновленное решение, чтобы создать пользователя с его идентификатором и паролем. – Nirekin

+0

В редактировании, создающем объект «Пользователь», пользователь может установить свои собственные данные учетной записи, но они не могут, поскольку пользовательский идентификатор автоматически создается для них. Редактирование создается так, как если бы это был класс 'Login', который у меня не может быть. 'Id' и' password' в моем 'login' принадлежат классу' User'. Не могли бы вы рассказать мне, не ясен ли я в своей проблеме? Я чувствую, что мне кажется, что моя проблема связана с «Employee» и «User», когда она фактически находится в «User» и «Login». Спасибо – AbiAik

0

Струны userID и password принадлежат Employee объекта. Вы не инициализируете эти значения в своем классе User, поэтому они null.

Вы можете сделать это, как этот

public String getUerID() { 
    return employee.getUserID(); 

Если вы хотите, чтобы они принадлежат к классу User, как вы объявленную им в классе, вы должны изменить свой User конструктор. например

public User(String id, String pwd) { 
    this.userID = id; 
    this.password = pwd; 
} 

Тогда вам нужно выяснить, хотите ли вы по-прежнему объект Employee или нет.

Вы должны пересмотреть некоторые дизайнерские решения

+0

'userID' принадлежит к объекту' User'. 'userID' создается путем объединения' staffID 'и' authorityLevel' класса 'Employee': userID = employee.getID() +" "+ employee.getAuthorityLevel(); – AbiAik

+0

Приносим извинения за мое форматирование. Когда я нажимаю кнопку ввода, чтобы начать новую строку, она просто представляет мой комментарий. – AbiAik

Смежные вопросы