Java 数组问题,未正确复制

Java 数组问题,未正确复制,java,arrays,Java,Arrays,这是我正在使用的代码,从csv中获取行,将它们存储到一个名为userDetails的字符串数组中,然后从该数据中获取从第4个值开始的userDetails的所有值(userDetails[3]),并将它们放入一个名为scores的二维整数数组中 private void loadFromCSVFile() { String path = "res/users.csv"; BufferedReader br = null; String r

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

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();
                }
            }
        }

    }
创建用户类的新实例,并传递3个字符串(第一个=用户名,第二个=密码,第三个=用户类型(无论是教师、学生还是管理员)),连同3个字符串一起传递整数数组“分数”

此代码是为了在程序的后面我可以使用以下代码:

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] );
            }
        }

for(int i=0;i您正在为所有用户使用相同的
分数[]【】
。您应该为每个用户创建一个新的
分数[]【】
实例:

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);
}
while((row=br.readLine())!=null)
{
字符串[]userDetails=row.split(DELIMETER);
int[][]分数=新int[3][9]************************************
int i=3;

对于(int x=0;x Show us
User
static
),问题是您使用的是相同的
分数[][]
为您的所有用户。您应该在
中为每个用户创建一个新实例…@brso05我在附近。OP更新他们的问题后,我将回顾更多细节。我不确定,为什么您需要两个
用于
循环,外部for循环
用于(int x=0;x@jacogroves
分数[][]
您正在重复使用它,所有
用户都会使用它
这就是为什么它总是显示您最后的
用户
。您是否尝试过该代码?@JacobGroves他们都指向相同的
分数[][]
array.@JacobGroves看看我发布的代码,试试看它是否有效。看看所有的*******************************你需要初始化你的
分数[][]
循环中,
循环中…好的,谢谢,这已经起作用了,但是你能解释一下为什么它不起作用吗,在我看来,这段代码应该使用相同的数组,但是每次它生成一个新用户时,它都有不同的内容?所以所有用户都使用相同的数组,它刚刚被重新编写,为什么不是这样case@Jacobgrove是因为数组在某种意义上类似于对象而不是原语。创建新用户时,您是
user=new user(userDetails[0],userDetails[1],userDetails[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);
}