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()中拥有该文件的完整地址吗?我的教科书告诉我这样做,这也可能是错误的。
答案 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