You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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方法内的局部变量,每次调用都生成新的空行存储当前段的坐标。

修复方案

  1. 删除splitLineString中多余的第一次newCoordinateRow调用,改为一次调用获取当前段的坐标行后直接传入placeCoordinateRow
  2. 将convertCoordinates中的while(coordinateScanner.hasNext())替换为if(coordinateScanner.hasNext())
  3. 把position == "front"改为"front".equals(position)
  4. 将newSplitStringRow从类成员变量移到newCoordinateRow方法内,每次调用都初始化新的空CoordinateRow对象

内容的提问来源于stack exchange,提问作者Weightlifting Without Limits

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:06:02