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

每个case均添加break,switch仍执行default分支的问题求助

问题分析与解决

核心问题

  1. 循环无法终止:validOperator变量始终为false,导致外层while(!validOperator)循环不会结束。执行完合法操作后,程序会再次进入循环读取操作符,但此时因输入缓冲区残留换行符,input.nextLine()会读取到空字符串,空字符串不匹配任何case,从而进入default分支。
  2. 输入缓冲区残留换行符:使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 02:26:11