Java开发中如何实现switch语句的case选项仅可被单次使用?
实现方案
这个需求完全可以实现,核心思路是新增状态标记记录0、1、2三个选项的使用情况,每次用户选择后先校验状态再执行对应逻辑即可。
具体实现步骤如下:
- 在循环外新增一个布尔数组,长度为3,初始值全为false,分别对应三个配料的未使用状态
- 进入每个case分支时,先检查对应位置的状态标记:如果为true,直接提示用户该配料已添加,无法重复选择
- 如果状态为false,执行原有的添加价格逻辑,同时把对应位置的标记改为true,后续就无法再次选择该选项
修改后的完整代码如下:
boolean flag = true; // 下标0对应沙拉、1对应培根、2对应薯条,默认false代表未使用 boolean[] usedToppings = new boolean[3]; while(flag){ System.out.println("Enter your choice for extra toppings "); int choice = scanner.nextInt(); scanner.nextLine(); switch(choice) { case 0: if (usedToppings[0]) { System.out.println("salad has already been added, cannot select again\n"); break; } double salad = 0.35; setAdditional(getAdditional() + salad); System.out.println("salad added\n"); usedToppings[0] = true; break; case 1: if (usedToppings[1]) { System.out.println("bacon has already been added, cannot select again\n"); break; } double bacon = 1.05; setAdditional(getAdditional() + bacon); System.out.println("Bacon added \n"); usedToppings[1] = true; break; case 2: if (usedToppings[2]) { System.out.println("fries has already been added, cannot select again\n"); break; } double fries = 0.79; setAdditional(getAdditional() + fries); System.out.println("fries added \n"); usedToppings[2] = true; break; case 3: System.out.println("Done"); flag = false; break; default: System.out.println("invalid choice, please try again\n"); } }
如果想要优化用户体验,还可以在每次打印输入提示的时候,动态过滤已经被使用的选项,只把剩余可选的选项展示给用户,避免用户输入无效选项。
内容的提问来源于stack exchange,提问作者Florin123
相关产品推荐
相关产品推荐

