当前位置: 首页 > 知识库问答 >
问题:

数组问题,不能正确复制

顾文昌
2023-03-14

这是我正在使用的代码,从csv中获取行,将它们存储到一个名为userDetails的字符串数组中,然后从这个数据中获取从第四个值开始的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();
                }
            }
        }

    }

台词:

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

创建用户类的新实例,并传递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] );
            }
        }

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

例如,如果csv包含:

人员1、密码、学生、1、2、3等

第二个人、密码、学生、10、9、8等

无论你以谁的身份登录,它总是会显示10作为第一个分数。

任何帮助将不胜感激,抱歉长时间阅读,如果你需要任何有关该计划的更多信息,只是问,我会定期检查,直到我找到一个解决方案。

提前非常感谢。

共有1个答案

司健柏
2023-03-14

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

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);
}
 类似资料:
  • 问题内容: 我在Springs Web Flow中遇到问题。如果用户单击表单提交按钮,则我的bean 中将有 RIGHT 值。 例如,性别字段为MALE或FEMALE。但是,然后我添加了一个 AjaxEventDecoration 来对性别下拉框的更改进行提交,这实际上是一种 形式:select, 并且在bean中,我将获得值 “ sex” ,即elementId。下面是我的代码,请您检查一下,让

  • 我有一个特殊的问题,当在数组中分配循环中的元素时,事情发生得很好。 当我移出循环并进行检查时,所有索引的相同数组值将设置为最后一个索引的数组值。下面是代码 当我打印的这基本上是在循环值显示正确.的时刻执行出来并检查"outside_loop"的值成为dataModelCollection[6]. getName()-这是最后一个索引的值.相同是、、的情况。 不知道我哪里错了。 无论它的价值在这里是

  • 我试图检查通过cv2.imread()实际读取的数据,但每当我这样做时,我得到的是一个全灰色屏幕。我应该得到彩虹的图像。

  • 问题内容: 我有一个似乎无法满足的简单要求:我有一个产品页面。产品具有供应商,供应商输入是带有自动完成功能的文本字段。如果用户输入数据库中不存在的供应商,则需要添加它。要添加它,我在.load()页面上有一个DIV并调用了我的/ Vendor / Create控制器方法。该方法的视图使用: 这应该通过ajax发布我的表单,完成后调用Javascript。我遇到的问题是,提交后,我的整个页面都会刷新

  • 我错过了什么关于正确关闭生产者和消费者的事情吗?

  • 当我运行这个程序时,它应该是写的 p、 s我对编码还不熟悉