Java递归实现字符转字母距离存入数组?新手代码报错求助
问题分析与解决方案
你的核心问题是未实现递归逻辑:当前代码仅处理单个字符就返回数组,既没有递归调用自身处理剩余字符,也未将递归结果合并到最终数组中,导致无法填充全部5个位置,同时完全没用到递归满足需求。
具体问题拆解
- 缺少递归调用:代码没有调用
distanceFromA处理子串,相当于只执行了一次字符转换,完全不符合递归实现的要求。 - 数组填充不完整:返回的数组仅一个位置被赋值,其余都是默认的
0,无法完成“按顺序存入所有字符距离值”的需求。
修正后的递归实现代码
import java.util.Arrays; public class WordDistances { public static int[] distanceFromA(String word) { // 初始化长度固定为5的结果数组 int[] result = new int[5]; // 递归基准条件:子串长度为0时,返回全0数组终止递归 if (word.length() == 0) { return result; } // 递归处理去掉第一个字符后的子串,得到子问题的结果数组 int[] subResult = distanceFromA(word.substring(1)); // 计算当前字符在数组中的索引:初始串长5对应索引0,串长4对应索引1,以此类推 int currentIndex = 5 - word.length(); // 转换当前字符为与'a'的距离(统一转小写兼容大小写输入) int distance = Character.toLowerCase(word.charAt(0)) - 'a'; result[currentIndex] = distance; // 将递归得到的子数组内容复制到当前数组的后续位置 System.arraycopy(subResult, 0, result, currentIndex + 1, subResult.length); return result; } public static void main(String[] args) { System.out.print(Arrays.toString(distanceFromA("abcde"))); // 输出 [0, 1, 2, 3, 4] } }
递归逻辑说明
- 基准条件:当传入的字符串长度为0时,返回全0的长度为5的数组,终止递归链条。
- 递归步骤:每次调用时先处理当前字符串的第一个字符,计算距离值并放入数组对应位置;再递归处理去掉首字符的子串,将子串的结果数组内容复制到当前数组的后续位置,最终返回填充完成的数组。
内容的提问来源于stack exchange,提问作者k l
相关产品推荐
相关产品推荐

