限制数组

时间:2013-01-10 18:38:59

标签: java arrays file-io

这是我下面的代码,我得到了一个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]);
        }

    }

}

5 个答案:

答案 0 :(得分:2)

你没有使用ArrayList的Strings,你正在使用一个简单的字符串数组。 您似乎从scan.hasNext()获得了超过100件商品,因此您最终会尝试访问names[100]并获得您描述的例外情况 相反,你可以使用这个:

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

然后

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

你不必担心事先知道确切的尺寸

答案 1 :(得分:1)

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

只需使用names.add(scan.nextLine())

将元素添加到ArrayList即可
ArrayList<String> names = new ArrayList<String>();
while (scan.hasNext()) {
      names.add(scan.nextLine())
}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

将while循环中的条件更改为

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

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

答案 4 :(得分: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);
    }