java - 代码输入不匹配异常问题
问题描述
我在这里遇到了一些麻烦。基本上,我得到了输入行
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
我不确定发生了什么。
解决方案
似乎有两种类型的坐标值分隔符,逗号和空格。
你应该改变
splitStringArrayScanner.useDelimiter(",");
至
splitStringArrayScanner.useDelimiter(",|\\s+");
推荐阅读
- google-app-engine - 我可以在不完全重新部署的情况下更新 App Engine Flexible 的扩展配置吗?
- mysql - 从 MySQL 中删除用户输入
- python - 创建一个函数来查看每组唯一 ID 列值的增加或减少
- python - 带有 json 的 Python 数组
- apache-spark - Spark with Mesos:java.lang.UnsatisfiedLinkError:libsvn_delta-1.so.0:无法打开共享对象文件:没有这样的文件或目录
- c# - IF null 或空集 0 LINQ
- sql - 如何从一个字符串列中拆分值
- linux - 通过 Azure Devops 将 docker 映像部署到 Linux 上的 Web 应用程序失败
- python - 在字符串列表中查找邻居
- javascript - 更新数据库上深层嵌套数据的正确方法是什么