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

二次方程求解程序嵌套类问题修正:移除static修饰符实现判别式计算

二次方程求解程序的嵌套类问题修复方案

问题原因

Java中普通内部类(未用static修饰的嵌套类)属于外部类的实例成员,依赖外部类的实例存在,因此无法包含静态方法——静态方法属于类本身,不依赖任何实例。你的Disko类是普通内部类,却定义了静态方法calc,这是语法错误的根源。

修复方案(推荐)

将Disko改为静态嵌套类,这样它就属于外部类Abc本身,而非实例成员,就能合法定义静态方法。修改仅需在class Disko前添加static修饰符,原有调用逻辑无需改动。

修改后的完整代码:

import java.util.Scanner;

public class Abc{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter a: ");
        double a = scanner.nextDouble();
        System.out.print("Enter b: ");
        double b = scanner.nextDouble();
        System.out.print("Enter c: ");
        double c = scanner.nextDouble();
        double massiv[] = Disko.calc(a, b, c);
        System.out.println("Number of decisions = " + massiv.length);
        for (double x : massiv) {
            System.out.println("x = " + x);
        }
    }

    // 改为静态嵌套类
    static class Disko{
        public static double[] calc(double a, double b, double c) {
            double d = b * b - 4 * a * c;
            if (a == 0) {
                System.out.println("degenerate x");
                System.exit(1);
            } else if (d > 0) {
                return new double[]{(-b - Math.sqrt(d)) / (2 * a), (-b + Math.sqrt(d)) / (2 * a)};
            } else if (d == 0) {
                return new double[]{-b / (2 * a)};
            } else {
                return new double[]{};
            }
        }
    }
}

备选方案(不推荐)

如果必须保留普通内部类,需要把calc方法改为非静态,同时在main方法中先创建外部类Abc的实例,再通过该实例创建Disko实例来调用方法。这种方式不符合“判别式计算由嵌套类完成”的简洁需求,仅作参考:

import java.util.Scanner;

public class Abc{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter a: ");
        double a = scanner.nextDouble();
        System.out.print("Enter b: ");
        double b = scanner.nextDouble();
        System.out.print("Enter c: ");
        double c = scanner.nextDouble();
        // 创建外部类实例,再创建内部类实例
        Abc outer = new Abc();
        Disko disko = outer.new Disko();
        double massiv[] = disko.calc(a, b, c);
        System.out.println("Number of decisions = " + massiv.length);
        for (double x : massiv) {
            System.out.println("x = " + x);
        }
    }

    class Disko{
        // 改为非静态方法
        public double[] calc(double a, double b, double c) {
            double d = b * b - 4 * a * c;
            if (a == 0) {
                System.out.println("degenerate x");
                System.exit(1);
            } else if (d > 0) {
                return new double[]{(-b - Math.sqrt(d)) / (2 * a), (-b + Math.sqrt(d)) / (2 * a)};
            } else if (d == 0) {
                return new double[]{-b / (2 * a)};
            } else {
                return new double[]{};
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:05:24