You need to enable JavaScript to run this app. Java基于自定义Real类实现输入建对象与数值还原方法
优惠活动
大模型
产品
解决方案
定价
更多

Java基于自定义Real类实现输入建对象与数值还原方法

现有代码的核心问题点
  • 方法职责错位:需求要求的“接收用户输入创建Real对象”的createRealObject()方法没有实现,反而把这段逻辑写到了无参的createRealNumber()里,有参的转换方法留空
  • 输入读取逻辑错误:用sc.nextLong()读取实数,碰到小数点会直接抛输入类型不匹配异常
  • 返回值类型不匹配:原createRealNumber方法定义的返回值是long,只能存储整数,没法承载带小数的实数,会丢失精度
  • Real对象构造逻辑缺失:创建对象后没有把用户输入的内容存入对象的字段,默认构造的对象所有字段都是0
  • 数值转换逻辑缺失:有参的转换方法没有从Real对象里取字段做计算,直接返回固定的0
修正后的可运行代码
import java.util.Scanner;
public class RealApplication {

    // 实现需求1:接收用户输入,创建对应的Real类对象
    public Real createRealObject() {
        Scanner sc = new Scanner(System.in);
        System.out.print("Please, enter a real number: ");
        String inputContent = sc.nextLine().trim();
        long wholeNumPart = 0;
        long decimalPart = 0;

        // 按小数点拆分输入内容
        if (inputContent.contains(".")) {
            String[] parts = inputContent.split("\\.");
            // 解析整数部分
            if (!parts[0].isEmpty()) {
                wholeNumPart = Long.parseLong(parts[0]);
            }
            // 解析小数部分
            if (parts.length > 1 && !parts[1].isEmpty()) {
                decimalPart = Long.parseLong(parts[1]);
            }
        } else {
            // 纯整数场景直接解析
            wholeNumPart = Long.parseLong(inputContent);
        }
        // 传入拆分好的字段值,构造Real对象返回
        return new Real(wholeNumPart, decimalPart);
    }

    // 实现需求2:接收Real对象,返回其表示的实际实数
    public double createRealNumber(Real num) {
        long whole = num.getWholeNumPart();
        long decimal = num.getDecimalPart();
        // 计算小数部分的位权,还原小数真实值
        int decimalDigits = String.valueOf(decimal).length();
        double decimalRealValue = decimal / Math.pow(10, decimalDigits);
        // 拼接整数和小数部分,返回最终实数
        return whole + decimalRealValue;
    }

    // 测试入口
    public static void main(String[] args) {
        RealApplication app = new RealApplication();
        Real userInputReal = app.createRealObject();
        System.out.println("The real number represented by the object is: " + app.createRealNumber(userInputReal));
    }
}
逻辑说明
  • 输入读取改用整行字符串读取,配合小数点分割,兼容带小数、纯整数、小数点前无数字的输入场景,解决原方法读不到带小数内容的问题
  • 构造Real对象时直接把拆分得到的整数、小数值传入类的有参构造器,不再生成全0的空对象
  • 转换方法里通过计算存为long的小数部分的位数,还原小数的实际位权,解决原方法返回固定0值的问题

注意:现有你定义的Real类存在结构设计缺陷——只存储了小数的数字内容,没有存储小数的位数,遇到类似0.01和0.1这类带前导零的小数,会出现转换精度偏差。如果需要完全精确的精度,需要在Real类中新增一个存储小数位数的字段,当前实现基于已有的类结构完成,覆盖常规无前置零的小数输入场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 17:15:04