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