【发布时间】:2015-07-30 15:37:33
【问题描述】:
这是我正在使用的代码,用于从 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 个字符串,它通过整数数组“分数”。
这段代码是为了以后在程序中我可以使用该代码:
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 作为第一个分数。
任何帮助都将不胜感激,对于长期阅读感到抱歉,如果您需要有关该程序的更多信息,请询问,我会定期合理地检查这一点,直到我找到解决方案。
非常感谢您。
【问题讨论】:
-
告诉我们
User。 (static) -
问题是您为所有用户使用相同的
scores[][]。您应该在while循环中为每个用户创建一个新实例... -
@brso05 我在附近。一旦 OP 用更多详细信息更新他们的问题,我会进行审查。
-
我不确定,为什么你需要两个
for循环,外部for循环有什么用for (int x = 0 ; x <= 2 ; x++)...根据我的理解,内部for循环负责读取9个分数值来自一名学生的 csv