0

这是我下面的代码,我得到一个 java.lang.IndexOutOfBoundsException 并且我无法修复它?我应该停止出现错误,因为文件中有 100 多个名称!

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ArrayPractice1 {
    public static void main(String[] args) throws FileNotFoundException
    {

        String[] names = new String[100];
        Scanner scan = new Scanner(new File("names.txt"));
        int index = 0;

        while (scan.hasNext()){
            names[index]=(scan.nextLine());
            index++;
        }     
        for(int i = 0; i <index -1; i++){
            System.out.println(names[i]);
        }

    }

}
4

5 回答 5

2

您不是在使用字符串的ArrayList,而是在使用普通的字符串数组。似乎您从中获得了 100 多个项目scan.hasNext(),因此您最终尝试访问names[100]并获取您描述的异常
,您可以使用以下命令:

ArrayList<String> names = new ArrayList<String>();

接着

while (scan.hasNext()){
   names.add(scan.nextLine());
} 

而且您不必担心事先知道确切的尺寸

于 2013-01-10T18:40:42.790 回答
1

如果在编译时不知道输入的大小,请考虑使用 anArrayList而不是数组。

只需将元素添加到ArrayListusing names.add(scan.nextLine())

ArrayList<String> names = new ArrayList<String>();
while (scan.hasNext()) {
      names.add(scan.nextLine())
}
于 2013-01-10T18:40:54.777 回答
0

你给 100 作为数组的大小。如果你的文件有超过 100 行,肯定会抛出异常

于 2013-01-10T18:40:23.867 回答
0

将 while 循环中的条件更改为

while (scan.hasNext() && index < 100)

填满数组后,这将停止读取循环

于 2013-01-10T18:40:26.570 回答
0

为什么不让它独立于任何上限?使用ArrayList

    ArrayList<String> names = new ArrayList<String>();
    Scanner scan = new Scanner(new File("names.txt"));

    while (scan.hasNext()){
        names.add(scan.nextLine());
    }     
    for(String name : names){
        System.out.println(name);
    }
于 2013-01-10T18:42:06.047 回答