所以,我正在研究一个类的代码,无法弄清楚是什么问题。代码编译,当我输入我正在搜索的文件时,我收到此消息:
Enter the name of the file: FanData.txt
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:909)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextInt(Scanner.java:2160)
at java.util.Scanner.nextInt(Scanner.java:2119)
at FanDriver.fillArray(FanDriver.java:76)
at FanDriver.main(FanDriver.java:35)
按任意键继续。 。
我正在使用TextPad作为我的编译器,文本文件在项目中。以下是我编写的代码(忽略引号中调用的方法,因为它们是我之后需要做的事情):
import java.io.*;
import java.util.Scanner;
public class FanDriver
{
private static Scanner keyboard = new Scanner(System.in);
public static void main(String args[]) throws IOException
{
// Constant for the amount of elements of the array
final int MAXSIZE = 100;
// Declaring variables
int amountFans = 0;
// Declaring and initializing our array of fans
Fan[] fans = new Fan[MAXSIZE];
// Calling all of our methods
amountFans = fillArray(fans, MAXSIZE);
/**
listFanData(fans, amountFans);
bubbleSortByAge(fans, amountFans);
listFanData(fans, amountFans);
bubbleSortByFan(fans, amountFans);
listFanData(fans, amountFans);
searchByAge(fans, amountFans);
searchByFan(fans, amountFans);
*/
}
public static int fillArray(Fan[] array, int MAXSIZE) throws IOException
{
// Declaring variables
int counter = 0;
int age;
String name;
// Getting the file name
System.out.print("\nEnter the name of the file: ");
String fileName = keyboard.nextLine();
// Opening the file
File file = new File(fileName);
Scanner inputFile = new Scanner(file);
// Making sure the file was successfully opened
if (!file.exists())
{
System.out.println("\nERROR: FILE DOESN'T EXIST. CLOSING PROGRAM NOW.");
// Exiting the program
System.exit(0);
}
// Reading all of the amounts from the file
while (inputFile.hasNext() && counter < MAXSIZE)
{
name = inputFile.nextLine();
age = inputFile.nextInt();
array[counter] = new Fan(name, age);
// Adding to our counter
counter = counter + 1;
}
//Closing file
inputFile.close();
return counter;
}
}
我没有Fan类的代码,只有类本身。 我们检索的文件是文件FanData.txt,如下所示:
Chris P. Cream 五 Scott Free 9 Lou Tenant 3 Trish Fish 12 艾拉梅纳特 4 冬青节 3 Robyn DeCradle 12 Annette Funicello 4 毛毛 7 格罗弗 3 大鸟 9 伯特 7 厄尼 3 格罗弗 9
文本文件是逐行的。一行是名称,下一个是数字。我不知道如何在这里正确格式化。 任何帮助将不胜感激。
答案 0 :(得分:0)
错误是由于类型不匹配造成的。在您第一次读取扫描仪后将指向非整数值。
在执行
之前尝试打印您的名字age = inputFile.nextInt();
你会知道这个问题。
上面提到的是理解错误的方法。
解决您的问题
尝试:
age = Integer.parseInt(inputFile.nextLine()); //而不是age = inputFile.nextInt();
答案 1 :(得分:0)
异常是因为您从textfile中读取文本值并直接分配给int类型时类型不匹配。
如果将值解析为如下所示的整数
,则将解决异常Integer.valueOf(inputFile.nextLine())的;
答案 2 :(得分:0)
我不确定输入文件中的分隔符。
您实例化&#34; Scanner&#34;(未指定任何显式分隔符)的方式应使用默认分隔符,即空格字符。
似乎&#34; nextLine()&#34;在您的情况下,方法不会返回&#34;行&#34;。
而是返回一个数字或字符串(可能是,您需要检查您的文件)which is not matching with the pattern followed by your Scanner。