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

Java递归生成A-Z字符数组失败:为何输出异常字符?

递归生成A-Z字符数组的错误分析及修正

你的代码存在三个核心问题,导致输出空字符(异常字符)且丢失A-Z:

  • 从未填充数组内容:每次调用alphabets方法都会新建一个空的char[26],但你没有把任何字符存入这个数组,只是不断递归调用,最后返回的数组全程都是默认的空字符'\u0000'。
  • 递归逻辑跳过了所有目标字符:当start <= end时,你先把start自增,再递归调用下一个字符,这导致初始的'A'根本没被处理;当递归到'Z'时,start变成91(对应字符'['),此时不满足条件直接返回空数组,所有递归层的ret都会被覆盖成这个空数组。
  • 未利用递归层级对应数组索引:你没有建立递归次数和数组位置的关联,比如第一次递归处理'A'应该放在索引0,第二次处理'B'放在索引1,以此类推。

修正后的代码

public class Recursion_Maharaj {
    public static void main(String[] args) {
        System.out.println("Recursion...");
        char[] alphabet = alphabets('A');
        for (char c : alphabet) {
            System.out.println(c);
        }
    }

    static char[] alphabets(char startChar) {
        char[] result = new char[26];
        fillAlphabets(startChar, 0, result);
        return result;
    }

    static void fillAlphabets(char current, int index, char[] array) {
        if (current > 'Z') {
            return;
        }
        array[index] = current;
        fillAlphabets((char) (current + 1), index + 1, array);
    }
}

修正逻辑说明

  1. 先创建好长度为26的目标数组,避免递归中重复创建空数组。
  2. 用辅助递归方法fillAlphabets处理填充逻辑:每次把当前字符存入数组对应索引,然后递归处理下一个字符,同时索引自增。
  3. 终止条件设为current > 'Z',确保所有A到Z的字符都被存入数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:01:24