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); } }
修正逻辑说明
- 先创建好长度为26的目标数组,避免递归中重复创建空数组。
- 用辅助递归方法
fillAlphabets处理填充逻辑:每次把当前字符存入数组对应索引,然后递归处理下一个字符,同时索引自增。 - 终止条件设为
current > 'Z',确保所有A到Z的字符都被存入数组。
内容的提问来源于stack exchange,提问作者small_boy
相关产品推荐
相关产品推荐

