如何修复Java中do-while与switch-case循环的问题?
代码问题排查与修正
核心问题梳理
局部变量重复定义,循环条件完全失效
在do代码块开头定义了int shapecheck=1;,但每个case分支里又重新声明了同名的int shapecheck,这会直接覆盖外层变量。循环条件while (shapecheck==1)判断的始终是开头那个固定为1的变量,用户输入的选择根本无法控制循环结束,要么死循环,要么逻辑完全不符合预期。图形选择仅读取一次,无法重复切换图形
shape变量在循环外部只读取了一次,进入do-while循环后不会再次提示用户选择图形,每次循环都执行第一次选中的图形计算,完全达不到“重复执行不同图形面积计算”的需求。初始提示文本格式错误
提示字符串里的n/是换行符\n的笔误,且多余空格导致提示信息显示混乱,用户无法清晰看到选择说明。
修正后的代码
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int shapecheck; do { // 每次循环重新提示用户选择图形 System.out.println("请输入图形对应的数字:\n(1-三角形, 2-圆形, 3-矩形)"); int shape = scanner.nextInt(); switch(shape) { case 1: CalcArea.CalcTri(); break; case 2: CalcArea.CalcCir(); break; case 3: CalcArea.CalcRect(); break; default: System.out.println("无效的图形选择,请重新输入"); } // 统一询问是否继续操作 System.out.println("是否计算其他图形?(1-是, 0-否)"); shapecheck = scanner.nextInt(); } while (shapecheck == 1); }
修正说明
- 将
shapecheck移到循环外声明,避免局部变量覆盖,确保用户输入的选择能正确控制循环的终止。 - 把图形选择的提示和
shape的读取逻辑放到do循环内部,每次循环都让用户重新选择图形。 - 统一在switch逻辑结束后询问是否继续,删除重复代码,同时修正了提示文本的格式错误。
- 给default分支添加提示,处理无效输入的场景。
内容的提问来源于stack exchange,提问作者Brazos Wheeler
相关产品推荐
相关产品推荐

