首页 > 解决方案 > 代码输入不匹配异常问题

问题描述

我在这里遇到了一些麻烦。基本上,我得到了输入行

5,4 4,5 8,7=6,3 3,2 9,6 4,3=7,6=9,8=5,5 7,8 6,5 6,4

我按 分割=,然后调整坐标,将它们添加回数组行并将它们向前或向后移动。

问题是,一旦我启动我的程序,它就会抛出一个输入不匹配异常并且不知道为什么。

这是我的代码:

public class Pirate {
    
    int singleCoordinateX;
        int singleCoordinateY;
        PrintStream out;
        String position;
        Coordinate coordinates;
        CoordinateRow newSplitStringRow;
        String splitString;
        CoordinateRow adjustedSplitStringRow;
        CoordinateRow newAdjustedSplitStringRow;
    
    Pirate() {
    out = new PrintStream(System.out);
    position = "front";
            newSplitStringRow = new CoordinateRow();
            adjustedSplitStringRow = new CoordinateRow();
            newAdjustedSplitStringRow = new CoordinateRow();
    }
    
void start() {

    Scanner newCoordinateInputData = UIAuxiliaryMethods.askUserForInput().getScanner();

    String singleLineInputString = newCoordinateInputData.nextLine();

    splitLineString(singleLineInputString);

    printCoordinateRow();
}


void splitLineString(String singleLineInputString) {

    String[] newSingleLineStringArray = singleLineInputString.split("=");

    for(int i = 0; i < newSingleLineStringArray.length; i++) {

        splitString = newSingleLineStringArray[i];
        
        Scanner splitStringScanner = new Scanner(splitString);
        
        newCoordinateRow(splitStringScanner);
        
        placeCoordinateRow(newCoordinateRow(splitStringScanner));
    }
        
}


CoordinateRow newCoordinateRow(Scanner splitStringScanner) {
    
    splitStringScanner.useDelimiter("\\s+");
    
    while(splitStringScanner.hasNext()) {
        
        String coordinateString = splitStringScanner.next();
        
        coordinates = convertCoordinates(coordinateString);
        
        newSplitStringRow.addSingleCoordinateToBack(coordinates);
        
    }
    
    return newSplitStringRow;
    
}

Coordinate convertCoordinates(String coordinateString) {
    
    Scanner coordinateScanner = new Scanner(coordinateString);
    
    coordinateScanner.useDelimiter(",");
    
    while(coordinateScanner.hasNext()) {
        
        singleCoordinateX = coordinateScanner.nextInt();
        
        singleCoordinateY = coordinateScanner.nextInt();
        
        coordinates = new Coordinate(singleCoordinateX, singleCoordinateY);
    }
    
    return coordinates;
}



CoordinateRow placeCoordinateRow(CoordinateRow adjustedSplitStringRow) {

    if(position == "front") {

        newAdjustedSplitStringRow.addCoordinateRowFront(adjustedSplitStringRow);

        position = "back";

    } else if(position == "back") {

        newAdjustedSplitStringRow.addCoordinateRowBack(adjustedSplitStringRow);

        position = "front"; 
    }

    return newAdjustedSplitStringRow;

}

void printCoordinateRow() {

    for(int i = 0; i < newAdjustedSplitStringRow.numberOfElements; i++) {

        out.printf("%d, %d\n", newAdjustedSplitStringRow.newCoordinateArray[i].coordinateX, newAdjustedSplitStringRow.newCoordinateArray[i].coordinateY);           
    }

}

堆栈跟踪:

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.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at Pirate.Pirate.convertCoordinates(Pirate.java:81)
    at Pirate.Pirate.splitLineString(Pirate.java:63)
    at Pirate.Pirate.start(Pirate.java:47)
    at Pirate.Pirate.main(Pirate.java:257)

我得到的输出:

6, 4
5, 5
9, 7
7, 3
4, 2
10, 6
5, 3
8, 6
10, 8
6, 5
8, 8
7, 5
7, 4
6, 4
5, 5
9, 7
7, 3
4, 2
10, 6
5, 3
8, 6
6, 4
5, 5
9, 7
6, 4
5, 5
9, 7
7, 3
4, 2
10, 6
5, 3
6, 4
5, 5
9, 7
7, 3
4, 2
10, 6
5, 3
8, 6
10, 8

我应该得到的输出

6,5
8,8
7,5
7,4
8,6
6,4
5,5
9,7
7,3
4,2
10,6
5,3
10,8

我不确定发生了什么。

标签: java

解决方案


似乎有两种类型的坐标值分隔符,逗号和空格。

你应该改变

splitStringArrayScanner.useDelimiter(",");

splitStringArrayScanner.useDelimiter(",|\\s+");

推荐阅读