Java 读取并存储数组中的整数

Java 读取并存储数组中的整数,java,arrays,integer,Java,Arrays,Integer,我对java相当陌生,我有一些代码不能正常工作,我不知道为什么会有任何帮助将不胜感激 我试图从文本文件中读取整数并将其存储在数组中。这是我的密码: Scanner keyboard = new Scanner(System.in); File file = new File ("Grades.txt"); FileReader input = new FileReader(file); BufferedReader in = new BufferedReader(inp

我对java相当陌生,我有一些代码不能正常工作,我不知道为什么会有任何帮助将不胜感激

我试图从文本文件中读取整数并将其存储在数组中。这是我的密码:

Scanner keyboard = new Scanner(System.in);

    File file = new File ("Grades.txt");
    FileReader input = new FileReader(file);
    BufferedReader in = new BufferedReader(input);

    int [] id = new int [500];

    String s = in.readLine();
    String s1 = s.substring(0,5);

    while (s != null){
        int i = 0;
        id[i] = Integer.parseInt(s1);
        System.out.println(id[i]);
        s = in.readLine();
    }
    in.close();
我遇到的问题是,它只存储文本文件中的第一个整数,并为以下行显示相同的整数。以下是我的输出:

57363
57363
57363
57363
57363
57363
57363
下面是我正在阅读的文本文件的布局:

57363 Joy Ryder D D C P H H C D
72992 Laura Norder H H H D D H H H
71258 Eileen Over C F C D C C C P
70541 Ben Dover F F F P C C C F
46485 Justin Time F C F C D P D H
61391 Anna Conda D D F D D F D D
88985 Bob Down P F P F P F P P

您正在一次又一次地覆盖id[0]。您需要增加循环中的索引变量
i
。而且,
s1
永远不会更新

int i = 0;
while (s != null){
    id[i] = Integer.parseInt(s.substring(0, 5));
    System.out.println(id[i]);
    s = in.readLine();
    i++;    
}
但是,解决此问题的更好方法是使用
扫描仪

Scanner s = new Scanner(new File("Grades.txt"));
int i = 0;
while (s.hasNextLine()) {
    id[i] = s.nextInt();
    System.out.println(id[i]);
    // (The remaining fields could be read with s.next())
    s.nextLine(); // skip rest of line
    i++;
}

您正在一次又一次地覆盖id[0]。您需要增加循环中的索引变量
i
。而且,
s1
永远不会更新

int i = 0;
while (s != null){
    id[i] = Integer.parseInt(s.substring(0, 5));
    System.out.println(id[i]);
    s = in.readLine();
    i++;    
}
但是,解决此问题的更好方法是使用
扫描仪

Scanner s = new Scanner(new File("Grades.txt"));
int i = 0;
while (s.hasNextLine()) {
    id[i] = s.nextInt();
    System.out.println(id[i]);
    // (The remaining fields could be read with s.next())
    s.nextLine(); // skip rest of line
    i++;
}

您从未更改s1,也从未增加i:

String s = in.readLine();
String s1 = s.substring(0,5);

while (s != null){
    int i = 0;
    id[i] = Integer.parseInt(s1);
    System.out.println(id[i]);
    s = in.readLine();
}
我想这就是你想要做的:

String s = in.readLine();
String s1 = s.substring(0,5);
int i = 0;
while (s != null){
    id[i] = Integer.parseInt(s1);
    System.out.println(id[i]);
    s = in.readLine();
    s1 = s.substring(0,5);
    i++
}

您从未更改s1,也从未增加i:

String s = in.readLine();
String s1 = s.substring(0,5);

while (s != null){
    int i = 0;
    id[i] = Integer.parseInt(s1);
    System.out.println(id[i]);
    s = in.readLine();
}
我想这就是你想要做的:

String s = in.readLine();
String s1 = s.substring(0,5);
int i = 0;
while (s != null){
    id[i] = Integer.parseInt(s1);
    System.out.println(id[i]);
    s = in.readLine();
    s1 = s.substring(0,5);
    i++
}

而且
s1
永不改变。谢谢,第一个解决方案非常有效!我还尝试了您提供的Scanner方法,因为它看起来更简单,但显示的输出为7行重复的单个数字0,
I
在写入值后但在打印值之前递增。向下移动
i++
。现在它可以工作了。请注意,如果您将代码包装在一个try块中,如下所示:
try(Scanner s=new Scanner(…){剩下的代码在这里}
扫描仪将自动为您关闭。啊,我明白了,非常感谢您的帮助。而且
s1
永远不会更改。谢谢您,第一个解决方案工作得很好!我还尝试了您提供的Scanner方法,因为它看起来更简单,但显示的输出为7行重复的单个数字0,
I
在写入值后但在打印值之前递增。向下移动
i++
。现在它可以工作了。请注意,如果您将代码包装在一个try块中,如下所示:
try(Scanner s=new Scanner(…){剩下的代码在这里}
扫描仪将自动为您关闭。啊,我明白了,非常感谢您的帮助。