我的java程序不会导入文本文件

时间:2014-12-04 23:19:48

标签: java arrays import records

import java.util.Scanner;

class RacecarTimes
{
    int carNumber, trackDistance;
    String track;
    double time;
}

public class main
{
    public static void main(String[] args) throws Exception
    {

            Scanner inFile = new Scanner(new java.io.File("racecartimes.txt"));

            RacecarTimes[] data = new RacecarTimes[10];
            int numRecords, i = 0, a = 1;

            while (inFile.hasNext() && i < data.length)
            {
                    RacecarTimes n = new RacecarTimes();
                    n.carNumber = inFile.nextInt();
                    n.trackDistance = inFile.nextInt();
                    n.track = inFile.nextLine();
                    n.time = inFile.nextDouble();
                    data[i] = n;
                    i++;
            }
            inFile.close();
            numRecords = i;

            System.out.println(numRecords + " race times loaded.");

            int fastest = data[0].carNumber;
            double fastestTime = data[0].trackDistance/data[0].time;

            while (a < numRecords)
            {
                    if ((data[a].trackDistance/data[a].time) < fastestTime)
                    {
                            fastestTime = data[a].trackDistance/data[a].time;
                            fastest = data[a].carNumber;
                            a++;
                    }

                    else
                    {
                            a++;
                            continue;
                    }
            }

            for(int q = 0; q < numRecords; q++)
            {
                    System.out.println("Car: " + data[q].carNumber);
                    System.out.println("Track: " + data[q].track);
                    System.out.println("Track Distance: " + data[q].trackDistance);
                    System.out.println("Time: " + data[q].time + "\n");
            }

            System.out.println("Fastest time: " + fastestTime + "m/s");
            System.out.println("Fastest Car Number: " + fastest);

        }
}

这是一项学校作业,因此它符合作业的所有要求,我只需要让它发挥作用。我在一个名为&#34; racecartimes.txt&#34;的java类的目录中有一个文本文件。由于某种原因,我收到了这个错误:

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 AndrewLaramore56.main(AndrewLaramore56.java:40)

程序应从文本文件中导入赛车信息,然后将其与最快的时间/车一起吐出。

我不确定出了什么问题或者如何修复它。我需要在java.io.File()中拥有该文件的完整地址吗?我的教科书告诉我这样做,这也可能是错误的。

2 个答案:

答案 0 :(得分:0)

找到了该文件,否则您将获得FileNotFoundException。看起来n.carNumber = inFile.nextInt();上会抛出异常,因为读入的数据不是有效的int

答案 1 :(得分:0)

您正在检查Scanner是否有其他输入令牌,但不是它的类型。此外,在尝试检查是否存在多个令牌之后,您试图将多个令牌拉出来:

while (inFile.hasNext() && i < data.length)  // there exists at least one token
{
    RacecarTimes n = new RacecarTimes();
    n.carNumber = inFile.nextInt();          // what if the next token is not an int?
    n.trackDistance = inFile.nextInt();      // you haven't checked for this token at all
    n.track = inFile.nextLine();             // etc
    n.time = inFile.nextDouble();

您需要单独检查每个数据,以验证其类型是否正确,以及还有更多数据需要阅读:

while (inFile.hasNext() && i < data.length)
{
    RacecarTimes n = new RacecarTimes();
    if (inFile.hasNextInt()) {
        n.carNumber = inFile.nextInt();
    }
    if (inFile.hasNextInt()) {
        n.trackDistance = inFile.nextInt();
    }
    // etc