我正在尝试创建一个程序,其中用户输入包含测试分数的文件的名称,并将测试分数存储到数组中并执行不同的功能。我无法将文本文件读入数组。当我尝试运行程序时,我不断收到大量错误。这是我试图使用的代码。顺便说一下,我是初学者。
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]);
}
}
}
}
我也试过使用while循环,但那也没有用。如果我不知道会有多少元素,我也想知道如何初始化数组?
我收到以下错误
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)
编辑:该文件由数字13 98 78 86 45 66 92 97 82 51 70 90 80 86组成,其中13是该组中的数据条目数。 (来自OP的评论)。
答案 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。
答案 1 :(得分:0)
来自Oracle的Java文档,java.util.Scanner
hasNext()
如果此扫描器的输入中有另一个标记,则返回true。
hasNextInt()
如果使用nextInt()
方法将此扫描器输入中的下一个标记解释为默认基数中的int值,则返回true。
(这是一个疯狂的猜测,因为您没有上传文件)。您的文件可能有一个可以读取的令牌,但它可能不一定像int
那样可读。尝试使用hasNextInt()
。
PS:此外,不需要同时使用for
和if
。您可以像这样构建代码:
int index = 0;
while (filsource.hasNextInt()) {
intarray[index++] = filesource.nextInt();
// anything else you want to do
}
number = index + 1; // number of ints read
答案 2 :(得分:0)
你的代码确实有效,正如Santosh Pavate所说,你应该采用一些好的做法。
但是,正如我所说的那样,只有在您正确格式化文件的情况下,我才尝试使用以下配置:
1
2
3
4
5
和
1 2 3 4 5
就像一些简单的测试一样,它确实有效,但是当我尝试这样的事情时:
1, 2, 3, 4, 5
那时我和你有同样的错误。该错误是因为您在扫描仪上调用“nextInt()”并且下一个字符不是有效的整数字符。要解决此问题,您只需要确保文件格式正确,或者如果您的示例有失败的地方,答案用逗号分隔,您可以尝试使用userDelimiter(String)或useDelimiter更改扫描仪上的分隔符(模式)。
-Thomas