运行代码时,线程“main”java.util.InputMismatchException中出现异常

运行代码时,线程“main”java.util.InputMismatchException中出现异常,java,arrays,object,methods,ioexception,Java,Arrays,Object,Methods,Ioexception,线程主java.util.InputMismatchException中出现异常 位于java.util.Scanner.throwForUnknown Source 位于java.util.Scanner.nextUnknown Source 位于java.util.Scanner.nextInUnknown Source 位于java.util.Scanner.nextInUnknown Source 位于PeriodicTable.elementsinperiodictable.java:

线程主java.util.InputMismatchException中出现异常 位于java.util.Scanner.throwForUnknown Source 位于java.util.Scanner.nextUnknown Source 位于java.util.Scanner.nextInUnknown Source 位于java.util.Scanner.nextInUnknown Source 位于PeriodicTable.elementsinperiodictable.java:54 在PeriodicTable.findElementPeriodicTable.java:107 在PeriodicTable.main PeriodicTable.java:82

是运行此代码时出现的错误。谁能告诉我哪里出了问题?为了进一步了解,我试图创建一个代码,它从元素周期表中提取元素信息,并根据原子或缩写给出元素信息

这是迄今为止的代码:

public class PeriodicTable {

    static class PeriodicElement{
        int[] atomicNumber = new int[200];
        double[] atomicMass = new double[200];
        String[][] abbreviation = new String[200][200];
        String[] theTable = new String[200];

        public String[] toString(String[] arr){
            String[] s = Arrays.toString(arr).split(" ");
            return s;
        }

        public PeriodicElement(String[] pElement) {
            toString(pElement);

        }
    }
    public PeriodicTable(String[] theTable) throws IOException{
        Scanner inputFile = new Scanner(new File("/Users/eddie/workspace/PeriodicTable/src/table.txt"));
        while (inputFile.hasNextLine()){
            int i = 0;
            theTable[i] = inputFile.nextLine();
            i++;
        }
        inputFile.close();// close the file when done
    }

    public static String[] readTable(String[] table)throws IOException{
        PeriodicTable inputFile = new PeriodicTable(table);
        return table;
    }

    public static int elementsInt(int found)throws IOException{
        Scanner inputFile = new Scanner(new File("/Users/eddie/workspace/PeriodicTable/src/table.txt"));
        while (inputFile.hasNextLine()){
            int[] table = new int[200];
            int i = 0;
            table[i] = inputFile.nextInt();
            if (found == table[i]){
                System.out.println("found your number!");
                return table[i];
            }
            else
                i++;
        }
        inputFile.close();// close the file when done.
        return found;
    }

    public static void main(String[] args)throws IOException { // Main Method
        final int NUMBER_ELEMENTS = 0;
        Scanner keyboard = new Scanner(System.in);
        String yourName = "your Name";
        System.out.println("Periodic Table by " + yourName);
        System.out.println(" ");
        System.out.println("Number of elements: " + getNumberOfElements(NUMBER_ELEMENTS));
        System.out.println("1. Search atomic number ");
        System.out.println("2. Search abbreviation  ");
        System.out.println("3. Print table ");
        System.out.println("4. Exit ");
        int choice = keyboard.nextInt();
        switch (choice) {
            case 1: System.out.print("Enter an atomic number: ");
                int aNumber = keyboard.nextInt();
                findElement(aNumber);
                System.out.println("your atomic number is: " + findElement(aNumber) );
                break;

            case 2: System.out.print("Enter an abbreviation");
                String abbreviation = keyboard.next();
                break;

            case 3: String[] everything = new String[200];
                PeriodicElement print = new PeriodicElement(printTable(everything));
                for(int i=0; i<everything.length ;i++){
                    System.out.println(print);
                }
                break;

            case 4: break;
        }
    }

    public static int getNumberOfElements(int num){
        return num = 118;
    }

    public static int findElement(int e1)throws IOException {
        return elementsInt(e1);
    }

    public static String[] printTable(String[] display)throws IOException{
        PeriodicElement printAll = new PeriodicElement(printTable(display));
        for(int i=0; i<display.length ;i++){
            System.out.println(printAll);
        }
        return display;
    }
}

似乎table.txt文件不仅包含数字,这就是inputFile.nextInt引发此异常的原因。 从JavaDoc:

由扫描程序引发,以指示检索到的令牌与预期类型的模式不匹配,或者该令牌超出预期类型的范围


当读取的字符不是本例中应该查找的整数或查找到的标记超出范围时,扫描程序会引发此异常

既然预测的最大原子序数是172i,如果我错了,请纠正我,它完全在这个范围之内

因此,最可能的例外情况是,table.txt文件中除了整数之外还有其他内容。等等


为什么不把它放在一个try块中,运行一个计数器来查找发生此错误的行号并检查您的文件。

谢谢!我感谢你的帮助。现在只需获取读取前三个字符int值的方法