无法识别的符号变量(JAVA)

unrecognized symbol variable (JAVA)

我有一个 class 可以求多项式的根。在 Main 函数中,它告诉我变量 radicand 不存在。函数 rootradicand() 工作正常,我用其他值测试过它。

public double handleRadicand(double a, double b, double c){
    double radicand = b * b - (4 * a * c);
    return radicand;
}

public static void Main(String[] args){
    double a = 4;
    double b = 2;
    double c = 2;
    handleRadicand(a, b, c);
    rootRadicand(radicand);
    System.out.println(radicand);
}

为什么它告诉我 radicand 不存在?

Radican 无法从方法中看到您需要的 getter 和 setter 值! How do getters and setters work?

问题是您正试图在其他方法中使用某个方法的局部变量,但它超出了该变量的范围。
但是由于您要返回 handleradicand() 方法的值,您可以在变量中捕获该值,或者您可以像这样直接调用方法作为参数:

rootradicand(handleradicand(a,b,c));

radicand 在不同的方法中定义(在 handleradicand 中),因此在 Main 方法中不可见。 通常在一个方法中定义的变量在另一个方法中是不可见的

查看屏幕截图,radicand 在 Main 中不可用,因为它不像您想象的那样 "Global",而是一个局部变量。如果你想让 radicand 成为一个全局的,它应该在某个地方的 class 中被声明为 public static(这是在 Java 中最接近全局的东西),你需要将其称为 NameOfClassRadicandIsIn.radicand.

就是说,Java 是一种专门为认为全局变量是邪恶的编程风格而构建的语言(并非没有充分的理由,全局变量的问题非常难以调试)。幸运的是,您的代码甚至不需要那个变量,因为您可以通过以下方式去掉中间人:

double radical = rootradicand(handleradicand(a,b,c));

尽管如果您确实想保留变量,只需在 Main 方法中声明它即可:

double radicand = handleradicand(a,b,c));
double radical = rootradicand(radicand);

请注意,我添加了 radical,因为您调用 rootradicand(...) 之后的那一行有完全相同的问题。

在学习语言的过程中,如果您发现自己很想尝试使用全局变量(即 java 中的 public static,这应该被视为最后的手段。您似乎正在编写程序现在只有一个 class,但是当你处理多个 class 时,你想在它们之间公开的任何变量都应该声明为 private 并使用 getter 访问和 setter 方法。

这是无效的:

return bover2a;
return radover2a;

return firstX;
return secondX;

你不能在 java 中的方法中加倍 return,如果你想要这个,你需要遵循另一种方法,比如创建一个自定义对象和 return 这两个值在里面。

并且您没有将 returned 值分配给任何变量,因此一旦调用完成,handleradicand(), rootradicand(), divideby2a(), findroots() 中进行的所有计算都会丢失。你需要这样的东西:

double rad = handleradicand(a, b, c);
rad = rootradicand(rad);
...

根据你的截图:

public double handleradicand(double a, double b, double c)
{
double rad = b*b - (4*a*c);
return rad;
}

到时候需要创建一个参数作为容器来获取returnrad值。 example:in 你的主要方法

double tem = handleradicand(a,b,c);
rootradicand(tem);

应该可以。