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

Java如何不使用循环仅用if/switch改写并修复单词统计代码

Java单词统计无循环改写方案

原代码存在的问题

  • 未做空指针、空字符串校验,输入""或null时会触发数组越界异常
  • 依赖for循环实现字符遍历,不符合无循环要求

改写思路

使用递归调用替代循环实现字符遍历,全程仅通过if分支做逻辑判断,完全不使用for/while/do-while等循环结构,同时100%保留原代码「连续字母序列计为1个单词」的统计规则。

改写后可运行代码

public static int countWords(String s) {
    // 修复原代码空输入异常问题
    if (s == null || s.isEmpty()) {
        return 0;
    }
    // 调用递归方法完成统计,初始状态:下标0、未在单词中、计数0
    return countWordsRecursive(s, 0, false, 0);
}

private static int countWordsRecursive(String s, int currentIndex, boolean inWord, int currentCount) {
    int endOfLine = s.length() - 1;
    // 递归终止条件:遍历完所有字符直接返回计数
    if (currentIndex >= s.length()) {
        return currentCount;
    }
    char currentChar = s.charAt(currentIndex);
    if (Character.isLetter(currentChar) && currentIndex != endOfLine) {
        // 当前是字母且非末尾,标记进入单词中,递归下一个字符
        return countWordsRecursive(s, currentIndex + 1, true, currentCount);
    } else if (!Character.isLetter(currentChar) && inWord) {
        // 当前非字母且之前在单词中,计数+1,标记不在单词中,递归下一个字符
        return countWordsRecursive(s, currentIndex + 1, false, currentCount + 1);
    } else if (Character.isLetter(currentChar) && currentIndex == endOfLine) {
        // 当前是末尾的字母,计数+1,递归结束
        return countWordsRecursive(s, currentIndex + 1, false, currentCount + 1);
    } else {
        // 其他情况(非字母且不在单词中),直接递归下一个字符
        return countWordsRecursive(s, currentIndex + 1, inWord, currentCount);
    }
}

功能验证

和原代码逻辑完全对齐:

  • 输入"hello world"返回2
  • 输入" hello java123test "返回3(连续字母序列为hello、java、test)
  • 输入"a"返回1
  • 输入""返回0
  • 输入null返回0

内容的提问来源于stack exchange,提问作者A.B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 05:06:00