【问题标题】:Adding objects to ArrayList<object>将对象添加到 ArrayList<object>
【发布时间】:2014-03-04 18:25:32
【问题描述】:

我正在尝试将文本文件中的用户名和密码组合列表(每行包含由空格分隔的用户名密码对)到名为 userList 的 ArrayList 中。 User 构造函数接受两个字符串,将它们设置为用户名和密码。这应该很简单,但是由于某种原因,当我在以下代码之后遍历数组时,所有用户都具有相同的用户名和密码(文本文件中的最后一行)。

见下面的代码:

BufferedReader br = new BufferedReader(new FileReader("user_pass.txt"))

String line, username, password; 

while ((line = br.readLine()) != null) {

    String separated[] = line.split(" ");

    username = separated[0];
    password = separated[1];

    userList.add(new User(username,password));
}

这是我遍历数组列表的方式:

        for(User u : userList){
            System.out.println(u.getUsername()+" --> "+u.getPassword());
        }

这是用户类:

公共类用户{

private static String username;
private static String password;


public User(String u, String p) {

    username = u;
    password = p;
}

public String getUsername(){
    return username;
}

public String getPassword(){
    return password;
}

【问题讨论】:

  • 您可以发布您的用户类的代码吗?每次循环迭代的用户名和密码的值是多少?
  • usernamepassword 字段是否是静态的?
  • 以纯文本形式(例如在您的 user_pass.txt 文件中)存储用户名和密码组合绝不是一个好主意。你应该先纠正这个问题。
  • 当我在每次迭代时打印用户名和密码的值时它们都很好(即文件读取和字符串拆分工作正常)。
  • @ErstwhileIII - 谁说它们是纯文本?文件中的密码也可以是 SHA 哈希,或类似的。

标签: java arraylist


【解决方案1】:

usernamepassword 字段是 static,这意味着它们将保留与类关联的每个字段的单个值(即最后分配的值)。删除 static 关键字将使它们成为实例变量并为每个类实例创建一个值

private String username;
private String password;

【讨论】:

    【解决方案2】:

    User 类中的usernamepassword 字段是静态的,这意味着它们是全局类变量(使用User.usernameUser.password 调用)。您应该删除 static 关键字,以便各个 User 对象实例可以拥有用户名和密码。

    【讨论】:

      【解决方案3】:

      在变量username和password之前删除User类中的“static”,你可能会没事的。

      或者,这应该可以:

      class User {
          String username, password;
      
          public User(String u, String p) {
              username = u;
              password = p;
          }
      }
      
      
      //Code in the other class
      Scanner s = new Scanner(new File("user_pass.txt"));
      while (scanner.hasNext()) userList.add(new User(s.next(), s.next()));
      s.close();
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-12
        • 2011-12-24
        • 2016-09-26
        • 2022-06-19
        • 2016-08-10
        • 2021-05-26
        • 2019-02-18
        相关资源
        最近更新 更多