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

如何实现正确的While循环:输入含'q'时终止代码重复

问题分析与修正方案

你的代码存在三个核心问题,导致循环无法按预期重复执行并终止:

  • 方法末尾的return key;会直接结束整个input()方法,while循环根本没机会重复运行
  • 检测到'q'后仅跳出了内部的for循环,没有触发外层while循环的终止逻辑
  • 即使输入包含'q',后续的数组处理、计算输出逻辑仍会执行,不符合终止预期

以下是修正后的完整代码:

public static String input() {
    Scanner input = new Scanner(System.in);
    
    while(true) {        
        String key = input.nextLine();
        // 直接用String内置方法判断是否包含'q',比手动遍历字符数组更简洁高效
        if (key.contains("q")) {
            // 检测到终止字符,直接跳出while循环
            break;
        }
        
        // 仅当输入不包含'q'时,才执行后续的计算与输出逻辑
        int[] radie = new int[(key.length())/2];
        int[] höjd = new int[(key.length())/2];
        for(int i = 0; i < key.length(); i++){    
            if(i % 2 == 0){    
                radie[i/2] = key.charAt(i) - '0';
            } else {    
                höjd[i/2] = key.charAt(i) - '0';            
            }
        }
        for(int i = 0; i < (key.length())/2; i++) {               
            System.out.print("r = " + radie[i] + " " + "h = " + höjd[i] + "\n\r" 
                + "Basytans area: " + area(radie[i], höjd[i]) + "\n\r" 
                + "Mantelytans area:" + area(radie[i]) + "\n\r" 
                + "Volym: " + volume(radie[i], höjd[i]) + "\n\r");
        }
    }
    // 循环终止后可根据需求返回对应内容,此处默认返回空字符串
    return "";
}

关键修改说明:

  1. 移除提前return语句:原代码的return key;会直接结束方法,现在将其移至while循环结束后,确保循环能重复执行直到触发终止条件
  2. 简化终止检测逻辑:用String.contains("q")替代手动遍历字符数组,代码更简洁且可读性更强
  3. 调整执行流程:检测到'q'时直接终止while循环,跳过后续的计算与输出步骤,符合需求逻辑
  4. 优化字符获取方式:直接使用key.charAt(i)获取字符,无需提前转换为char数组,减少不必要的内存开销

额外细节提醒:

  • 如果需要同时识别大写'Q',可将检测逻辑改为key.toLowerCase().contains("q")
  • 若输入字符串长度为奇数,key.length()/2会自动丢弃最后一个字符,可根据业务需求添加长度校验逻辑

内容的提问来源于stack exchange,提问作者Lotusxmw989898

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:55:26