我有一个带数字的文件。它看起来如下:
1 2
3 4
5 6
7 8
9 10
将数字读入数组时会出现问题。
这是一段代码:
Scanner file1 = new Scanner( new File("file1.txt") );
int lengt_h = 0;
// Here Eclipse crashes...
while( file1.hasNext() ) lengt_h++;
int[] numberArray = new int[lengt_h];
for(int i=0; i<numberArray.length; i++) {
numberArray[i] = file1.nextInt();
}
for(int n: numberArray) System.out.print(numberArray[n] + " ");
即使我将hasNext()函数更改为常量长度(例如10),numberArray数组中的数字如下所示:
1 1 1 2 1 1 5 5 1 3
为什么代码无法正常运行?
答案 0 :(得分:2)
Sacanner
中的while loop
指针,因此它是无限循环。for
循环中,您尝试访问numberArray[n]
中的元素,这是错误的,因为n
本身就是数组numberArray
中的数字。你可以试试这个:
public static void main(String args[]) throws FileNotFoundException {
Scanner file1 = new Scanner(new File("d:\\data.txt"));
int lengt_h = 0;
while (file1.hasNext()) {
lengt_h++;
file1.next();
}
file1 = new Scanner(new File("d:\\data.txt")); // again put file pointer at beginning
int[] numberArray = new int[lengt_h];
for (int i = 0; i < numberArray.length; i++) {
numberArray[i] = file1.nextInt(); // read integer from file
}
for (int n : numberArray)
System.out.print(n + " ");
}
答案 1 :(得分:1)
while( file1.hasNext() ) lengt_h++; // infi loop
当且仅当此扫描程序具有另一个标记时,hasNext 方法才返回true
public boolean hasNext()
您没有阅读下一个令牌,因此hasNext()
将始终返回true
<强> [编辑] 强>
如果您事先不知道数组的大小,最好使用ArrayList
[1] http://www.tutorialspoint.com/java/util/java_util_arraylist.htm
答案 2 :(得分:0)
在此检查hasNext方法http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#hasNext%28%29
它说&#34;扫描仪不会超过任何输入。&#34;
因此,为了进一步移动它,你应该移动到下一个标记。
答案 3 :(得分:0)
试试这个:
List<Integer> numberArray = new ArrayList<Integer>();
while (file1.hasNext())
numberArray.add(file1.nextInt());
for (Integer n : numberArray)
System.out.print(n + " ");