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

Java实现凯撒密码的程序运行返回空字符串该如何解决?

问题根因

你代码中存在的语法使用错误直接导致循环没有执行,最终返回空字符串:

  • Java 中String类型获取长度需要调用无参方法length(),你写的cipher.length是数组类型获取长度的写法,该写法对于String参数来说编译阶段就会报错。如果你反馈代码可以正常编译,说明你实际运行的代码要么参数类型被误定义为char[],要么循环判断条件被误写为永远不成立的逻辑,导致for循环一次都没有执行,空的StringBuilder直接转为空字符串返回。

修复方案

  1. 把for循环的判断条件修改为index < cipher.length()
  2. 可选优化:你当前对数字的处理逻辑会导致数字偏移超过9之后变为符号字符,如果需要数字也实现循环偏移,需要和字母逻辑保持一致做取模处理
  3. 可选兼容:如果需要支持负偏移量,可以在取模前补对应进制的数值(字母补26、数字补10),避免取模得到负数

修复后的完整代码

public static String caesarCipher (String cipher, int shiftAmount) {
    StringBuilder str = new StringBuilder();
    // 修正长度获取方式
    for (int index = 0; index < cipher.length(); index = index + 1 ){
        char letter = cipher.charAt(index);
        if (Character.isUpperCase(letter)){
            // 加26再取模兼容负偏移
            letter = (char)(((int) letter - 'A' + shiftAmount + 26) % 26 + 'A');
        }
        else if (Character.isLowerCase(letter)){
            letter = (char)(((int) letter - 'a' + shiftAmount + 26) % 26 + 'a');
        }
        else if (Character.isDigit(letter)){
            // 数字循环偏移处理,加10兼容负偏移
            letter = (char)(((int) letter - '0' + shiftAmount + 10) % 10 + '0');
        }
        str.append(letter);
    }
    return str.toString();
}

测试验证

调用HW2.caesarCipher("Character", 1)即可得到预期输出Dibsbdufs。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:27:04