Java处理坐标输入抛出InputMismatchException且输出不符问题排查
问题定位
1. 扫描器重复消耗+全局变量未重置导致坐标重复
你在splitLineString方法内对同一个splitStringScanner连续调用了两次newCoordinateRow:
newCoordinateRow(splitStringScanner); placeCoordinateRow(newCoordinateRow(splitStringScanner));
第一次调用已经把扫描器内的所有坐标数据读完,第二次调用时扫描器已无有效输入。同时newSplitStringRow是类成员变量,每次调用不会清空旧数据,导致所有按=分割的段的坐标不断累加,最终输出出现大量重复内容。
2. 坐标转换逻辑错误抛出InputMismatchException
convertCoordinates方法中使用while循环读取坐标是多余的,每个坐标字符串(如5,4)仅包含一组X、Y值,不需要循环遍历。如果扫描器读取完X值后没有对应的Y值,第二次调用nextInt就会直接抛出输入不匹配异常,应该把while改为if。
3. 字符串比较不规范
你使用==判断position的值,虽然常量字符串场景下暂时不会出错,但Java中字符串内容比较应该用equals方法,避免后续出现逻辑判断失效的问题。
4. 坐标行对象复用错误
newSplitStringRow是全局成员变量,每次处理新的分割段时不会创建新的空行,导致前一段的坐标被带到后一段,最终拼接结果完全不符合预期。你应该把newSplitStringRow改为newCoordinateRow方法内的局部变量,每次调用都生成新的空行存储当前段的坐标。
修复方案
- 删除
splitLineString中多余的第一次newCoordinateRow调用,改为一次调用获取当前段的坐标行后直接传入placeCoordinateRow - 将
convertCoordinates中的while(coordinateScanner.hasNext())替换为if(coordinateScanner.hasNext()) - 把
position == "front"改为"front".equals(position) - 将
newSplitStringRow从类成员变量移到newCoordinateRow方法内,每次调用都初始化新的空CoordinateRow对象
内容的提问来源于stack exchange,提问作者Weightlifting Without Limits
相关产品推荐
相关产品推荐

