每个case均添加break,switch仍执行default分支的问题求助
问题分析与解决
核心问题
- 循环无法终止:
validOperator变量始终为false,导致外层while(!validOperator)循环不会结束。执行完合法操作后,程序会再次进入循环读取操作符,但此时因输入缓冲区残留换行符,input.nextLine()会读取到空字符串,空字符串不匹配任何case,从而进入default分支。 - 输入缓冲区残留换行符:使用
input.nextInt()读取数值后,输入流中会遗留换行符,后续的input.nextLine()会直接读取这个空行,导致操作符匹配失败。
修复步骤
- 在每个
case分支的break语句前,添加validOperator = true;,标记操作符合法,终止外层循环。 - 在每个
case中的input.nextInt()之后,添加input.nextLine();,清除输入缓冲区的换行符,避免下一次读取操作符时得到空字符串。
修改后的完整代码
import java.util.Scanner; public class Main { public static void main(String[] args) { //创建用于接收用户输入的Scanner对象 Scanner input = new Scanner(System.in); //定义数组大小和操作数值的变量 int arraySize, arrayCalc; //获取数组大小 System.out.println("请输入数组的大小:"); arraySize = input.nextInt(); input.nextLine(); //若数组大小为0则重复输入 while (arraySize <= 0) { System.out.println("数组大小过小,请输入更大的值:"); arraySize = input.nextInt(); input.nextLine(); } //获取数组元素值 int[] array = new int[arraySize]; System.out.println("请输入数组的元素值:"); for (int i = 0; i < arraySize; i++) { array[i] = input.nextInt(); } input.nextLine(); System.out.println("请输入对应操作的字符:"); //若操作符无效则循环输入 boolean validOperator = false; while(!validOperator) { //获取操作符 String operation = input.nextLine(); switch (operation) { case "+": //加法操作 System.out.println("请输入要添加到数组的数值:"); arrayCalc = input.nextInt(); while (arrayCalc < 0) { System.out.println("输入的数值过小,请输入更大的数:"); arrayCalc = input.nextInt(); } input.nextLine(); // 清除换行符 //执行加法操作 for (int i = 0; i < arraySize; i++) { array[i] = array[i] + arrayCalc; } validOperator = true; // 标记操作合法,终止循环 break; case "-": //减法操作 System.out.println("请输入要从数组中减去的数值:"); arrayCalc = input.nextInt(); while (arrayCalc < 0) { System.out.println("输入的数值过小,请输入更大的数:"); arrayCalc = input.nextInt(); } input.nextLine(); // 清除换行符 //执行减法操作 for (int i = 0; i < arraySize; i++) { array[i] = array[i] - arrayCalc; } validOperator = true; // 标记操作合法,终止循环 break; case "*": //乘法操作 System.out.println("请输入要与数组相乘的数值:"); arrayCalc = input.nextInt(); while (arrayCalc < 0) { System.out.println("输入的数值过小,请输入更大的数:"); arrayCalc = input.nextInt(); } input.nextLine(); // 清除换行符 //执行乘法操作 for (int i = 0; i < arraySize; i++) { array[i] = array[i] * arrayCalc; } validOperator = true; // 标记操作合法,终止循环 break; case "/": //除法操作 System.out.println("请输入要与数组相除的数值:"); arrayCalc = input.nextInt(); while (arrayCalc < 0) { System.out.println("输入的数值过小,请输入更大的数:"); arrayCalc = input.nextInt(); } input.nextLine(); // 清除换行符 //执行除法操作 for (int i = 0; i < arraySize; i++) { array[i] = array[i] / arrayCalc; } validOperator = true; // 标记操作合法,终止循环 break; default: //输入无效操作符时提示 System.out.println("这不是有效的操作符!请尝试使用\"+\"、\"-\"、\"*\"或\"/\"。"); } } //输出执行操作后的数组 System.out.print("操作后的数组元素为: "); for (int i = 0; i < arraySize- 1; i++) { System.out.print(array[i] + ", "); if (i == arraySize - 2) { System.out.println(array[i + 1] + "."); } } } }
内容的提问来源于stack exchange,提问作者Heaper
相关产品推荐
相关产品推荐

