当前位置: 首页 > 知识库问答 >
问题:

扫描器异常:java.util.InputMisMatchException

谷翰飞
2023-03-14

我正在编写一个程序,它接受来自文件的输入,并打印城市及其降雨量的列表。我在确定阵列长度和城市降雨量数据的扫描仪上遇到了麻烦。

我一直得到这个例外

在java.util.scanner.throwfor(scanner.java:909)在java.util.scanner.next(scanner.java:1530)在java.util.scanner.nextInt(scanner.java:2160)在java.util.scanner.nextInt(scanner.java:2119)在barchart.main(barchart.java:29)在java.util.scanner.nextInt)在java.util.scanner.throwfor(scanner.java:909)

下面是我的代码:

import java.util.Scanner;

public class BarChart
{
    public static void main (String[] args)
    {
        //create scanner
        Scanner scan = new Scanner(System.in);

        //create size variable
        int size = scan.nextInt();

        //create arrays to hold cities and values
        String[] cities = new String [size];
        int[] values = new int [size];

        //input must be correct
        if (size > 0)
        {
            //set values of cities
            for(int i=0; i<size; i++)
            {
                cities[i] = scan.nextLine();
            }

            //set values of the data
            for(int j=0; j<size; j++)
            {
                values[j] = scan.nextInt();
            }

            //call the method to print the data
            printChart(cities, values);
        }
        //if wrong input given, explain and quit
        else
        {
            explanation();
            System.exit(0);
        }
    }

    //explanation of use
    public static void explanation()
    {
        System.out.println("");
        System.out.println("Error:");
        System.out.println("Input must be given from a file.");
        System.out.println("Must contain a list of cities and rainfall data");
        System.out.println("There must be at least 1 city for the program to run");
        System.out.println("");
        System.out.println("Example: java BarChart < input.txt");
        System.out.println("");
    }

    //print arrays created from file
    public static void printChart(String[] cities, int[] values)
    {
        for(int i=0; i<cities.length; i++)
        {
            System.out.printf( "%15s %-15s %n", cities, values);
        }
    }
}

共有1个答案

钮晟
2023-03-14

在您的文件中,如果列表的大小是第一行的唯一内容,换句话说,如下所示:

2
London
Paris
1
2

然后,当您进入for循环读取城市名称时,扫描仪还没有读取第一个换行符。在上面的示例中,对newline()的调用将读取空行和London,而不是LondonParis

因此,当您进入第二个for循环读取降雨数据时,扫描仪还没有读取最后一个城市(在上面的示例中是Paris),并且会抛出inputMismatchException,因为城市名称显然不是有效的int

 类似资料:
  • 问题内容: 发生异常时,如何使扫描仪重试? 考虑此应用程序在CLI模式下运行。 例: 如果用户未输入类型输入,则抛出错误。但我想在错误消息出现之后。应该要求用户再次输入 宽度 。 怎么做? 问题答案: 如果我对您的理解正确,则希望该程序在失败后要求用户重新输入正确的输入。在这种情况下,您可以执行以下操作: 注意:您 只能 捕获并重试一次。这些方法会引发其他异常,如果您尝试重试这些异常,则您的应用程

  • 我已经尝试过了,但没有找到任何可以理解的解决方案(我对java非常陌生,这对我来说很难),或者自己解决它。以下是完整的代码(我知道代码不是那么高效): 正如您所看到的,我试图自己解决它,甚至在一些代码上添加了注释,但当它运行到方法并返回时,它失败了,因为扫描器认为在我写东西之前有东西要扫描。这里有个例外-

  • 问题内容: 我收到以下异常。 java.util.NoSuchElementException:找不到行 我在编写一个需要从文本文件读取的较大程序时遇到了此错误,因此决定进行测试。 而且我仍然得到例外。我在与名为stricts.txt的类相同的文件夹中有一个文本文件,其中包含文本。我究竟做错了什么? 问题答案: 新的File(“ restrictions.txt”)将在应用程序的“开始目录”中查找

  • 问题内容: 在AST扫描过程中,我正在寻找一个文件: (路径名称已更改为匿名) Java类非常简单,仅包含几个注释,可能可以针对Java 6进行编译。我在SonarQube 5.6中使用Java插件的4.0版。 是否想到为什么会这样? 问题答案: 我能够解决此问题。扫描使用SonarQube插件在Jenkins上运行。同时在同一工作空间中触发了第二个作业,这导致工作空间被Jenkins作业清除(已

  • 我有一个类,它创建多个对象,并将它们放入中,如下所示: 我有一个应用程序,它从控制台扫描输入“add”,如果找到,就调用方法,如下所示: 应用程序应该允许用户输入“add”,但在调用方法后,将出现错误“no line found”。 我猜这是因为方法中的没有关闭,然后在需要时重新打开。这是程序的问题吗?如果是,我该如何修复它? 请注意,这个程序还没有完成,因为我将添加一个出售这些股票的销售方法。这