java - 从文件中获取整数到 array

  显示原文与译文双语对照的内容
0 0

我试图创建一个程序,用户输入包含测试分数的文件名,并将测试分数存储在 array 中。 我无法将文本文件读取到 array 中。 我尝试运行程序时总是遇到大量错误。 下面是我要使用的代码。 我是初学者。

import java.util.*;
import java.io.*;
public class TestScores {
 public static void main( String [] args ) throws IOException 
 {
 int number=1;
 Scanner keyboard = new Scanner(System.in);
 System.out.println("Enter filename");
 String filename = keyboard.nextLine();
 File inputFile = new File(filename);
 Scanner filesource = new Scanner(new FileReader(inputFile));
 System.out.print(inputFile);
 int intarray[] = new int[99];
 for (int j=0; j<number; j++) {
 if (filesource.hasNext()) {
 intarray[j] = filesource.nextInt();
 number++;
 System.out.println(intarray[j]);
 }
 }
 }
}

我也尝试过使用一个循环,但这不管用。 如果我不知道将有多少元素,我还想知道如何初始化 array?

我收到以下错误

java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
 at java.util.Scanner.next(Unknown Source)
 at java.util.Scanner.nextInt(Unknown Source)
 at java.util.Scanner.nextInt(Unknown Source)
 at TestScores.main(TestScores.java:22)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
at.. ..model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

以下示例包含 set 13 98 78 45 66 97 92 90 where where是集合中数据项的数量。 ( 从OPs评论) 。

时间:原作者:8个回答

0 0
import java.util.*;
import java.io.*;
public class TestScores 
{
public static void main( String [] args ) throws IOException 
{
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter filename");
String filename = keyboard.nextLine();
String Line = null;
ArrayList<Integer> ContentList = new ArrayList<Integer>();
FileReader inputFile = new FileReader(filename);
BufferedReader bufferReader = new BufferedReader(inputFile);
while ((Line = bufferReader.readLine())!= null) 
{
 ContentList.add(Line+"n");
}
bufferReader.close();
int intarray[] = new int[99];//Better to use array list here also
int j = 0;
for (int i = 0; i <ContentList.size(); i++)
{
 int intarray[j++] = Integer.parseInt(ContentList.get(i).split(" +"));
//enters each element(integer) in the file to intarray
 System.out.println(intarray[j]);
}
}

从main方法中抛出IOException不是一个好做法。 相反,创建另一个具有相同代码的类,并从main方法调用它。 要求此类引发 IOException 。

原作者:
0 0

就像 Santosh Pavate所说的,你的代码实际上应该采用一些良好的实践。

但是,如我所说,如果你的文件格式正确,我尝试了以下配置:

1
2
3
4
5

1 2 3 4 5

就像一些简单的测试一样,当我尝试这样的情况时,它实际上是工作的:

1, 2, 3, 4, 5

那时候我跟你的错误。 错误是你正在调用"nextint ( ),而下一个字符不是有效的整数。 为了解决这个问题,你只需要确保文件格式正确,或者者如果有类似的示例,则可以以使用 userDelimiter(String) 或者 useDelimiter(Pattern) 修改分隔符。

-Thomas

原作者:
0 0

从oracle文档的Java,java.util.Scanner

如果这里扫描器在它的输入中有另一个标记,则 hasNext() 返回 true 。

如果在默认基数中可以使用 nextInt() 方法将这里扫描器的下一个标记解释为int值,hasNextInt() 返回 true 。

( 因为你没有上传文件,所以这是一个很常见的猜测) 。 你的文件可以能有一个可以以读取的令牌,但它可以能不一定是 int 可以读的。 尝试使用 hasNextInt()

PS: 同时,forif的使用是不必要的。 你可以像这样构造代码:

int index = 0;
while (filsource.hasNextInt()) {
 intarray[index++] = filesource.nextInt();
//anything else you want to do
}
number = index + 1;//number of ints read
原作者:
...