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

Java读取文本字符存入ArrayList传参后反转失效如何解决?

问题根因
  • 未执行文件写入操作:代码仅读取了文件内容到内存的ArrayList、修改了内存中ArrayList的顺序,没有将修改后的内容写回reverse.txt文件,原文件自然不会有变化,你代码中的PrintWriter相关逻辑全部被注释了。
  • 返回值转换逻辑错误:recursiveReverse方法中String.valueOf(str)的入参是ArrayList类型,不会直接拼接所有字符,最终得到的是ArrayList默认toString格式的字符串(带方括号、逗号分隔),如果需要使用返回值,该逻辑需要修正。
  • 命名不规范(不影响功能):方法名带recursive(递归),但实际用栈实现反转,和命名不符。
修复代码

驱动类修复(新增写入文件逻辑)

import java.util.Scanner;
import java.io.*;
import java.util.*;

public class HelloPrinterDriver
{
    public static void main(String[] args) throws FileNotFoundException
    {
        ArrayList<Character> list = new ArrayList<>();
        File inputFile = new File("src/reverse.txt");
        Scanner in = new Scanner(inputFile);
        in.useDelimiter("");

        // 读取文件所有字符到ArrayList
        while(in.hasNext())
        {
            char ch = in.next().charAt(0);
            list.add(ch);
        }
        in.close();

        // 执行反转
        String reverseResult = HelloPrinter.recursiveReverse(list);

        // 将反转后的内容写回文件
        PrintWriter out = new PrintWriter("src/reverse.txt");
        out.print(reverseResult);
        out.close();
    }
}

HelloPrinter类修复(修正字符串转换逻辑)

import java.util.*;

public class HelloPrinter
{
    public static String recursiveReverse(ArrayList<Character> str)
    {
        Stack<Character> st = new Stack<>();
        for(int i=0; i<str.size(); i++) {
            st.push(str.get(i));
        }
        for (int i=0; i<str.size(); i++) {
            str.set(i, st.pop());
        }
        // 修正字符串拼接逻辑
        StringBuilder sb = new StringBuilder();
        for (Character ch : str) {
            sb.append(ch);
        }
        return sb.toString();
    }

    // 可选:符合方法名的递归实现版本
    public static String realRecursiveReverse(ArrayList<Character> str) {
        reverseHelper(str, 0, str.size()-1);
        StringBuilder sb = new StringBuilder();
        for (Character ch : str) {
            sb.append(ch);
        }
        return sb.toString();
    }

    private static void reverseHelper(ArrayList<Character> str, int left, int right) {
        if (left >= right) return;
        char temp = str.get(left);
        str.set(left, str.get(right));
        str.set(right, temp);
        reverseHelper(str, left + 1, right - 1);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:18:02