4

Stackers. I've been searching the site for my question, but didn't find what I was looking for. I'm stuck with this code:

public class Users{
ArrayList<ValidateUser> personer = new ArrayList<ValidateUser>();
ValidateUser newUser = new ValidateUser();
    newUser.setUser("administrator");
    newUser.setPass("asdf123");
    newUser.setBalance(0.8);
    newUser.setType("admin");
    personer.add(newUser);

Got a nice array-list going on, but if i add more "newUsers" to the ArrayList, they seem to overwrite each other. I don't want to make a newUser1, newUser2 object, since later in my program, I have to be able to add new users, directly from the program.

How to achieve this?

ValidateUser:

public class ValidateUser {

private String username;
private String password;
private double balance;
private String role;


public void setUser(String user) {
    username = user;
}
public void setPass(String pass) {
    password = pass;
}
public void setBalance(double rating) {
    balance = rating;
}
public void setType(String type) {
    role = type;
}

public String getUsername() {
    return username;
}
public String getPassword() {
    return password;
}
public double getBalance() {
    return balance;
}
public String getRole() {
    return role;
}

}

0

2 Answers 2

13

If I understood right you're adding new users this way:

ValidateUser newUser = new ValidateUser();
    newUser.setUser("administrator");
    newUser.setPass("asdf123");
    newUser.setBalance(0.8);
    newUser.setType("admin");
    personer.add(newUser);

    newUser.setUser("different admin");
    personer.add(newUser);

however this way the object points to the same reference, thus you must do the following to instantiate a new object:

 newUser = new ValidateUser();
 newUser.setUser("foo");
 personer.add(newUser);
Sign up to request clarification or add additional context in comments.

2 Comments

I can't believe it was that simple. Thanks, everything works now! :)
@JesperBaungardBruunHansen yeah, you can image that it was the same person, but you just changed his name and then updated him.
4

As long as you new ValidateUser() you should be fine. In other words, if you instantiate a new object of the ValidateUser type, and add it to your ArrayList.

You did not clearly explain what you exactly do, but my first guess is that you use the same reference all over again... :)

Example how to make 10 new ValidateUser objects:

// Let's make 10 objects of ValidateUser type
ValidateUser tmpVuser = null;
for (int i = 0; i < 10; i++) {
    tmpVuser = new ValidateUser(); // notice: we always create a new instance
    tmpVuser.setUser("user" + i);
    tmpVuser.setPass("changeme" + i);
    tmpVuser.setBalance(0.8);
    tmpVuser.setType("admin");
    personer.add(tmpVuser);
}

However, it is worth of notice that if ValidateUser was an immutable type (more about it here: http://www.javapractices.com/topic/TopicAction.do?Id=29 ), your code would probably work fine.

1 Comment

Very nice, today i had this same trouble and this answer solved it.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.