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

Java递归实现句子按单词倒序输出功能存在逻辑错误求助

递归倒序单词问题修复方案

核心错误点

原writeBackward方法存在以下逻辑问题导致无法实现倒序效果:

  • 递归执行顺序错误:原代码先打印当前首个单词,再递归处理剩余字符串,最终输出为正序;倒序需要先递归处理剩余部分,再输出当前单词
  • 未兼容末尾单词边界:当字符串只剩最后一个单词时,s.indexOf(" ")会返回-1,原代码未处理该场景,会触发字符串下标越界异常
  • 修剪操作无效:output.trim()未重新赋值给变量,空格修剪逻辑不生效
  • 剩余字符串截取逻辑错误:原代码截取剩余字符串时保留了单词后的空格,会导致后续处理出现冗余空格、空匹配等问题
  • 方法调用不兼容:toFile为非静态方法,无法直接在静态的fromFile/main方法中调用,且原递归逻辑直接打印结果,未拼接成完整字符串用于输出到文件

修复后完整代码

import java.util.StringTokenizer;
import java.io.*;
public class Recursion {
    public static void main (String[] args) {
        System.out.println("Starting program...");
        System.out.println("\nFirst Line:");
        fromFile();
    }

    // 修改为返回倒序拼接后的字符串
    public static String writeBackward(String s) {
        s = s.trim();
        // 递归终止条件:空字符串直接返回
        if (s.isEmpty()) {
            System.out.println("Base Case is executed. Done.");
            return "";
        }
        int spaceIndex = s.indexOf(" ");
        // 边界处理:当前是最后一个单词,直接返回
        if (spaceIndex == -1) {
            return s;
        }
        String firstWord = s.substring(0, spaceIndex).trim();
        String restStr = s.substring(spaceIndex + 1).trim();
        // 先递归处理剩余字符串,再拼接当前单词,实现倒序
        return writeBackward(restStr) + " " + firstWord;
    }

    // 修改为静态方法,修改输出文件名避免覆盖输入文件
    public static void toFile(String output) {
        try {
            String outPutFile = "output.txt";
            FileWriter fileWrite = new FileWriter(outPutFile, true); // 追加模式支持多行输出
            BufferedWriter buffWrite = new BufferedWriter(fileWrite);
            PrintWriter outFile = new PrintWriter(buffWrite);
            outFile.println(output);
            buffWrite.flush();
            buffWrite.close();
        } catch(IOException exception) {
            System.out.println(exception.getMessage());
        }
    }

    public static void fromFile() {
        try {
            String temp;
            String inPutFile = "input.txt";
            String line = "";
            StringTokenizer inLine;
            FileReader fRead = new FileReader(inPutFile);
            BufferedReader bRead = new BufferedReader(fRead);
            line = bRead.readLine();
            while(line != null) {
                temp = line;
                System.out.println("原句子:" + temp);
                String reversedLine = writeBackward(temp);
                System.out.println("倒序后句子:" + reversedLine);
                // 写入输出文件
                toFile(reversedLine);
                line = bRead.readLine();
            }
            bRead.close();
        } catch(IOException exception) {
            System.out.println(exception.getMessage());
        }
    }
}

实现说明

  • 递归逻辑调整为:每次拆分出当前句子的首个单词后,优先递归处理剩下的所有单词,等递归返回后再拼接当前首个单词,最终整体实现单词倒序效果
  • 新增末尾单词边界处理,避免下标越界问题
  • toFile修改为追加模式,支持输入文件多行内容分别倒序后输出
  • 输入输出文件分离,避免覆盖原始输入内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:36:06