java" java.util.InputMismatchException"中的异常

时间:2014-04-23 03:27:58

标签: java inputmismatchexception

所以,我正在研究一个类的代码,无法弄清楚是什么问题。代码编译,当我输入我正在搜索的文件时,我收到此消息:

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

文本文件是逐行的。一行是名称,下一个是数字。我不知道如何在这里正确格式化。 任何帮助将不胜感激。

3 个答案:

答案 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