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

Java二分法求方程近似根代码如何实现In.txt读参及Out.txt输出

二分法求根代码文件读写改造方案

原错误代码核心问题

  • 变量作用域非法:epsilon、save是main方法的局部变量,不能直接在bisection方法中访问,save.close()直接写在类作用域属于语法错误
  • 输入读取逻辑错误:输入第四项是函数表达式字符串,不能用nextDouble直接读取
  • 方法修饰符错误:bisection方法被改为实例方法,无法直接在静态main方法中调用
  • 输出方法使用错误:PrintWriter的格式化输出需要用printf而非println
  • 资源未规范关闭:Scanner、PrintWriter等IO资源未按规范处理,可能导致内容没写入文件

正确实现代码

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;

class xyz {
    // 固定函数逻辑,和原硬编码保持一致,若需要支持动态解析输入的函数可引入JEP等表达式解析库
    static double func(double x) {
        return x * x - 2;
    }

    static void bisection(double a, double b, double epsilon, PrintWriter save) {
        if (func(a) * func(b) >= 0) {
            save.println("输入的区间a和b不合法,区间两端函数值同号");
            return;
        }

        double c = a;
        while ((b - a) >= epsilon) {
            c = (a + b) / 2;
            if (func(c) == 0.0)
                break;
            else if (func(c) * func(a) < 0)
                b = c;
            else
                a = c;
        }
        // 按要求输出保留4位小数的结果
        save.printf("%.4f", c);
    }

    public static void main(String[] args) throws FileNotFoundException {
        Scanner in = null;
        PrintWriter save = null;
        try {
            File file = new File("In.txt");
            in = new Scanner(file);
            save = new PrintWriter("Out.txt");

            double a = in.nextDouble();
            double b = in.nextDouble();
            double epsilon = in.nextDouble();
            // 跳过后续的函数字符串内容,当前默认使用x²-2
            if (in.hasNextLine()) {
                in.nextLine();
            }

            bisection(a, b, epsilon, save);
        } finally {
            // 确保资源一定关闭
            if (in != null) {
                in.close();
            }
            if (save != null) {
                save.close();
            }
        }
    }
}

运行说明

  1. 将In.txt放在项目运行的根目录,内容格式和示例一致:a b 精度 函数表达式,比如-1 5 0.25 (x*x)-2
  2. 运行代码后,同目录会生成Out.txt,输出内容和示例一致为1.4375
  3. 如果需要支持动态读取输入的不同函数表达式,可以引入第三方表达式解析库,解析读取到的函数字符串后替换当前的func方法逻辑即可。

内容的提问来源于stack exchange,提问作者Rafał Masny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:45:03