我正在尝试使用文件中的数据创建一个数组

时间:2013-04-15 01:13:33

标签: java

这就是我到目前为止所做的......

/**
 * @param args
 */
public static void main(String[] args) {
    final String DATA_FILE = "payroll_problem.txt";
      Scanner scan = null;
      try
      {
       scan = new Scanner(new File(DATA_FILE));
      }
      catch (FileNotFoundException e)
      {
       System.err.printf("Could not open file \"%s\".\n", DATA_FILE);
      }
    int [] arr = new int[scan.nextInt()];
    for(int i = 0; i < arr.length; i++)
    {
        arr[i] = scan.nextInt();
        System.out.print(arr[i]);
    }   

    scan.close();
}

我一直收到错误代码

Exception in thread "main" 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 fvse.main(fvse.java:22)

五个整数代表这个人从周一到周五工作了多少小时。这是数据文件。

Mohnan  Maria        8 8 8 9 8 10.01
Blue   Shelly        8 10 8 8 6  10.00
Black  8 8 8 8 8 23.0
Fortuna Jorge   5 5 5 5 5 10.10
Jones Mitchel   10 5.5 10 10 10 15.05
Olafson Sven    10 10 10 10 10  10.00
Cruz Astrid 1 1 1 1 1 20.50.3
Adler Irene 10 12 8 8 8  22.50

2 个答案:

答案 0 :(得分:1)

问题发生的原因是您调用了scan.nextInt()但输入文件实际上包含字符串/字符。

添加指示输入文件顶部行数的整数,或者逐行更改代码(例如:使用BufferredReader.readLine()

如果您选择前者,请确保您还使用两次scan.next()

调用来读取名字和姓氏

答案 1 :(得分:0)

您正在读取整数文件,但很可能该文件中填充了字符串或字符。

编辑:尝试扫描行或字符,或者只使用FileInputStream,然后在加载数据后解析数据。

编辑:现在我已经看过您的数据文件,我会使用标准文件输入实践读取文件(如果您需要相关教程,请查看http://www.javapractices.com/topic/TopicAction.do?Id=42)。然后根据空格拆分字符串,并遍历新字符串数组中的每个字符串并处理数据。前两个字符串是名称,然后是整数,直到你得到另一个名字或字符串的结尾。