为什么在使用我的扫描仪时会收到 java.util.InputMismatchException?

时间:2021-03-27 03:58:21

标签: java java.util.scanner

我应该首先接收一个整数输入,然后是一个双精度值,然后是一个字符串。然后我应该将它插入到一个链表中。 //TODO 部分是我实现代码的地方。我真的不知道为什么我会收到这些错误。我看到建议使用 useLocal() 方法,但它对错误没有帮助。

代码如下:

import java.util.*;

public class MileageTrackerLinkedList {
    public static void main(String[] args) {
        Scanner scnr = new Scanner(System.in);
        scnr.useLocale(Locale.US);

        // References for MileageTrackerNode objects
        MileageTrackerNode headNode;
        MileageTrackerNode currNode;
        MileageTrackerNode lastNode;

        double miles;
        String date;
        int i;
        int count;

        // Front of nodes list
        headNode = new MileageTrackerNode();
        lastNode = headNode;

        // TODO: Scan the number of nodes
        count = scnr.nextInt();

        // TODO: For the scanned number of nodes, scan
        //       in data and insert into the linked list
        for (i = 0; i < count; ++i) {
            miles = scnr.nextDouble();
            date = scnr.nextLine();
            currNode = new MileageTrackerNode(miles, date);
            lastNode.insertAfter(currNode);
            lastNode = currNode;
        }

        // TODO: Call the printNodeData() method
        //       to print the entire linked list
        for (i = 0; i < count; ++i) {
            headNode.printNodeData();
            headNode.getNext();
        }
    }
}

这是输入:

3
2.2
7/2/18
3.2
7/7/18
4.5
7/16/18

这里是错误信息:

Exception in thread "main" java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextDouble(Scanner.java:2564)
    at MileageTrackerLinkedList.main(MileageTrackerLinkedList.java:29)

1 个答案:

答案 0 :(得分:0)

不能混合使用 nextLine 和 nextAnythingElse。

简单的解决方法是使用 next() 来读取一行文本。为此,首先告诉扫描仪它应该一次为您提供一行答案。这通常就是您想要的(您向用户询问一些数据,然后他们按回车键。瞧:一行)。

new Scanner 之后,始终运行:scanner.useDelimiter("\r?\n");。然后将 .next() 用于文本,.nextInt() 用于整数等。