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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 16:22:32