数组问题,而不是正确复制

时间:2015-07-30 15:37:34

标签: java arrays

这是我正在处理的代码,从csv中获取行,将它们存储到名为userDetails的字符串数组中,然后,从这些数据中获取userDetails的所有值,从第4个值开始(userDetails [3]),并将它们放入称为分数的二维整数数组中。

private void loadFromCSVFile() 
    {
        String path = "res/users.csv";
        BufferedReader br = null;
        String row = "";
        String DELIMETER = ",";
        int[][] scores = new int[3][9];
        try {

            br = new BufferedReader(new FileReader(path));
            while ((row = br.readLine()) != null) 
            {
                String[] userDetails = row.split(DELIMETER);

                int i = 3;
                for (int x = 0 ; x <= 2 ; x++)
                {
                    for (int y = 0 ; y <= 8 ; y++)
                    {
                        scores[x][y] = Integer.valueOf(userDetails[i] );
                        i++;
                    }
                } 

                user = new User( userDetails[0] , userDetails[1] , userDetails[2], scores);
                LoginChecker.Users.add(user);
            }


        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

该行:

user = new User( userDetails[0] , userDetails[1] , userDetails[2], scores);
LoginChecker.Users.add(user);

创建User类的新实例,并传入3个字符串(第一个=用户名,第二个=密码,第三个=用户类型(无论是教师,学生还是管理员)),以及3个字符串,它通过整数数组得分&#39;。

这段代码是为了以后在程序中我可以使用代码:

for (int i = 0 ; i <= LoginChecker.Users.size() - 1 ; i++)
        {
            if (LoginChecker.Users.get(i).getUser().toLowerCase().equals(this.USERNAME))
            {
                System.out.println("Name: " + LoginChecker.Users.get(i).getUser().toLowerCase() + "  Score: " + LoginChecker.Users.get(i).getScores()[0][0] );
            }
        }

其中this.USERNAME是登录用户的字符串,理论上上面的代码应该为相关用户获得数组的第一个分数(即[0] [0])并打印出来,但它只显示csv中最后一个人的分数。

例如,如果csv包含:

人1,密码,学生,1,2,3等

人2,密码,学生,10,9,8等

无论您登录的是谁,它始终会显示10作为第一个分数。

任何帮助都会受到赞赏,对于长时间阅读感到抱歉,如果您需要有关该计划的更多信息,请定期检查,直到我找到解决方案。

非常感谢你。

1 个答案:

答案 0 :(得分:2)

您为所有用户使用相同的scores[][]。您应该为每个用户创建scores[][]的新实例:

while ((row = br.readLine()) != null) 
{
    String[] userDetails = row.split(DELIMETER);
    int[][] scores = new int[3][9];************************************
    int i = 3;
    for (int x = 0 ; x <= 2 ; x++)
    {
        for (int y = 0 ; y <= 8 ; y++)
        {
            scores[x][y] = Integer.valueOf(userDetails[i] );
            i++;
        }
    } 

    user = new User( userDetails[0] , userDetails[1] , userDetails[2], scores);
    LoginChecker.Users.add(user);
}