Java 从文件读入数组
我有一个有数字的档案。情况如下:Java 从文件读入数组,java,arrays,file,Java,Arrays,File,我有一个有数字的档案。情况如下: 1 2 3 4 5 6 7 8 9 10 1 1 1 2 1 1 5 5 1 3 将数字读入数组时出现问题 下面是一段代码: Scanner file1 = new Scanner( new File("file1.txt") ); int lengt_h = 0; // Here Eclipse crashes... while( file1.hasNext() ) lengt_h++; int[] numberArray = new int[le
1 2
3 4
5 6
7 8
9 10
1 1 1 2 1 1 5 5 1 3
将数字读入数组时出现问题
下面是一段代码:
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] + " ");
为什么代码不能正常工作
while( file1.hasNext() ) lengt_h++; // infi loop
hasNext当且仅当此扫描仪具有另一个令牌时,方法返回true
public boolean hasNext()
您没有读取下一个令牌,因此hasNext()
将始终返回true
[编辑]
如果您事先不知道数组的大小,最好使用ArrayList
[1]在此处检查hasNext方法 上面写着“扫描器不会超过任何输入。” 因此,要进一步移动它,您应该移动到下一个令牌。尝试以下操作:
List<Integer> numberArray = new ArrayList<Integer>();
while (file1.hasNext())
numberArray.add(file1.nextInt());
for (Integer n : numberArray)
System.out.print(n + " ");
List numberraray=new ArrayList();
while(file1.hasNext())
numberArray.add(file1.nextInt());
for(整数n:numberArray)
系统输出打印(n+“”);
while循环中没有移动Sacanner
指针,因此它是无限循环
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 + " ");
}
publicstaticvoidmain(字符串args[])抛出FileNotFoundException{
Scanner file1=新扫描仪(新文件(“d:\\data.txt”);
内部长度h=0;
while(file1.hasNext()){
长度h++;
file1.next();
}
file1=new Scanner(新文件(“d:\\data.txt”);//再次将文件指针放在开头
int[]numberArray=新的int[length_h];
for(int i=0;i
Eclipse崩溃,或者您的程序没有任何进展?您应该阅读Scanner.hasNext()
的文档,看看那里发生了什么。hasNext()
只是告诉您文件中是否有任何内容等待您。它实际上并没有超过这个数字。这里有一个无限循环,因为hasNext()
总是返回true
,因为您只会不断检查下一个标记是否存在,但从未真正读取它