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

Java初学者求助:报错无法找到父类子类符号,求均值标准差代码修正

解决Java父子类算术均值/标准差实现的报错问题

嘿,我帮你看看这个问题~你遇到的error: cannot find symbol superclass and subclass其实根源很明确:你只定义了父类ArithmeticMean,但完全没创建对应的子类,而且代码本身还有未完成的部分(比如输入逻辑、均值计算都没写完),导致Java无法识别父类子类的关系。我给你补全并修复了代码,完美实现父类计算算术均值、子类计算标准差的需求,一起来看:

完整可运行代码

import java.util.Scanner;

// 父类:专注实现算术均值的计算
class ArithmeticMean {
    protected double sum = 0;
    protected double mean;
    protected double[] numbers;
    protected int count;

    // 接收用户输入的数字
    void acceptNumbers() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("How many Numbers do you want to enter?");
        count = scanner.nextInt();
        numbers = new double[count]; // 根据输入数量动态初始化数组,不用固定死10个

        for (int i = 0; i < count; i++) {
            System.out.print("Enter number " + (i + 1) + ": ");
            numbers[i] = scanner.nextDouble();
            sum += numbers[i]; // 同步累加求和
        }
        scanner.close();
    }

    // 核心:计算算术均值
    void calculateMean() {
        if (count == 0) {
            mean = 0;
            return;
        }
        mean = sum / count;
        System.out.println("Arithmetic Mean: " + mean);
    }
}

// 子类:继承父类,实现标准差计算
class StandardDeviation extends ArithmeticMean {
    private double variance;
    private double standardDeviation;

    // 计算方差和标准差
    void calculateStandardDeviation() {
        // 先调用父类方法算出均值
        calculateMean();
        
        double sumOfSquares = 0;
        for (double num : numbers) {
            sumOfSquares += Math.pow(num - mean, 2);
        }
        // 这里用的是**样本标准差**(除以count-1),如果需要总体标准差,改成除以count即可
        variance = sumOfSquares / (count - 1);
        standardDeviation = Math.sqrt(variance);

        System.out.println("Variance: " + variance);
        System.out.println("Standard Deviation: " + standardDeviation);
    }
}

// 程序入口类
public class Main {
    public static void main(String[] args) {
        StandardDeviation sdCalculator = new StandardDeviation();
        sdCalculator.acceptNumbers();
        sdCalculator.calculateStandardDeviation();
    }
}

关键修复与优化点

  • 解决报错核心:创建并正确继承子类:我新增了StandardDeviation类,用extends ArithmeticMean实现继承,让Java能识别父类子类的关系,彻底解决“找不到符号”的报错。
  • 补全输入逻辑:你原来的accept方法只写了一半,现在补全了数字输入和实时求和的逻辑,还把数组改成动态初始化(根据用户输入的数量调整长度),比固定10个元素更灵活。
  • 合理设置属性访问权限:把父类的sum、mean等属性改成protected,既保证子类能直接访问,又避免了公开属性的不安全问题。
  • 拆分职责:父类只负责接收输入和计算均值,子类专注于计算方差和标准差,符合面向对象的单一职责原则。
  • 添加边界处理:增加了输入数量为0的判断,避免除以0的异常。

运行效果

运行程序后,输入你想要的数字数量,再依次输入每个数字,程序会自动输出算术均值、方差和标准差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:12:08