Java 将整数从文件中获取到数组中

Java 将整数从文件中获取到数组中,java,arrays,Java,Arrays,我试图创建一个程序,用户在其中输入包含测试分数的文件名,测试分数存储到一个数组中,并执行不同的功能。我无法将文本文件读入数组。当我试着运行程序时,我总是遇到很多错误。这是我试图使用的代码。顺便说一下,我是个初学者 import java.util.*; import java.io.*; public class TestScores { public static void main( String [] args ) throws IOException { int nu

我试图创建一个程序,用户在其中输入包含测试分数的文件名,测试分数存储到一个数组中,并执行不同的功能。我无法将文本文件读入数组。当我试着运行程序时,我总是遇到很多错误。这是我试图使用的代码。顺便说一下,我是个初学者

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]);
      }
    }
  }
}
编辑:文件由数字13 98 78 86 45 66 92 97 82 51 70 90 80 86组成,其中13是集合中的数据条目数。(来自OPs注释)。

导入java.util.*;
导入java.io.*;
公开课考试成绩
{
公共静态void main(字符串[]args)引发IOException
{
扫描仪键盘=新扫描仪(System.in);
System.out.println(“输入文件名”);
字符串文件名=keyboard.nextLine();
字符串行=null;
ArrayList ContentList=新的ArrayList();
FileReader inputFile=新的FileReader(文件名);
BufferedReader bufferReader=新的BufferedReader(inputFile);
而((Line=bufferReader.readLine())!=null)
{
ContentList.add(第+行“\n”);
}
bufferReader.close();
int intarray[]=new int[99];//这里最好也使用数组列表
int j=0;
对于(int i=0;i
从主方法抛出IOException不是一个好的做法。 而是创建另一个具有相同代码的类,并从main方法调用它。要求该类抛出IOException。

来自Oracle的Java文档

hasneat()
如果扫描仪的输入中有另一个令牌,则返回true

如果可以使用
nextInt()
方法将此扫描仪输入中的下一个标记解释为默认基数中的int值,则
hasNextInt()
返回true

(这是一个猜测,因为您没有上传您的文件)。您的文件可能有一个可以读取的标记,但它不一定是可读的
int
。请尝试使用
hasNextInt()

另外,对于
和如果使用
是不必要的。您可以这样构造代码:

int index = 0;
while (filsource.hasNextInt()) {
    intarray[index++] = filesource.nextInt();
    // anything else you want to do
}

number = index + 1; // number of ints read
1, 2, 3, 4, 5

您的代码确实有效,正如Santosh Pavate所说,您应该采用一些好的实践

但是,正如我所说,如果且仅当您的文件格式正确时,它才起作用,我尝试了以下配置:

1
2
3
4
5

就像一些简单的测试一样,它确实起了作用,但是当我尝试这样的东西时:

int index = 0;
while (filsource.hasNextInt()) {
    intarray[index++] = filesource.nextInt();
    // anything else you want to do
}

number = index + 1; // number of ints read
1, 2, 3, 4, 5
这时我遇到了与您相同的错误。该错误是因为您正在扫描仪上调用“nextInt()”和下一个字符不是有效的整数。若要解决此问题,您只需确保文件格式正确,或者如果您遇到类似我的示例中失败的问题,答案由逗号分隔,您可以尝试使用userDelimiter(字符串)或useDelimiter(模式)更改扫描仪上的分隔符


-托马斯

你能上传你的文件内容吗?
int intarray[]=new int[99]
,潜在溢出。请改用
列表
。您会遇到什么样的错误?它在我的电脑中工作。当我输入文件时,我会出错。该文件由数字13 98 78 86 45 66 92 97 82 51 70 90 80 86组成,其中13是集合中的数据条目数。您可以发布错误吗?我猜您对相对和绝对有问题e path
Integer.parseInt(ContentList.get(i).split(“+”);
真的吗?它到底做什么?“Integer.parseInt”将字符串转换为整数。但是,如果字符串不包含整数,则会出现运行时异常。“ContentList”是ArrayList,“.get”使用“i”。.split”获取每个索引的值根据给定的参数(“+”)将字符串拆分为一个数组,即一个或多个空格。整个语句的返回值为整数数组,因此已初始化为“intarray”。您只需确保文件格式正确,您可以使用
hasNextInt()
代替
hasNext()
。请参阅我的答案[该文件的格式与第二个文件(1 2 3 4 5)相同,但我仍然会遇到错误
1, 2, 3, 4, 5