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

时间:2015-08-24 17:45:40

标签: java polynomial-math

我有一个查找多项式根的类。在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不存在?

6 个答案:

答案 0 :(得分:1)

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

token.length

答案 1 :(得分:1)

根据你的截图:

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

那时,您需要创建一个参数作为容器来获取返回rad值。 例如:在您的主要方法

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

这应该有效。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

查看截图,radicand在Main中不可用,因为它不像您认为的那样是“全局”,而是一个局部变量。如果您希望radicand成为全局变量,则应该在某个类中将其声明为public static(这与Java中的Global最接近),您需要将其称为{{1 }}

也就是说,Java是一种专门为编程风格而构建的语言,它认为全局变量是邪恶的(并且没有充分的理由,全局变量的问题只是调试的可怕事情)。幸运的是,你的代码甚至不需要那个变量,因为你可以用以下方法删除中间人:

NameOfClassRadicandIsIn.radicand

虽然如果你想保留变量,只需在你的double radical = rootradicand(handleradicand(a,b,c)); 方法中声明它就可以了:

Main

请注意,我添加了double radicand = handleradicand(a,b,c)); double radical = rootradicand(radicand); ,因为拨打radical后的行有完全相同的问题。

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

答案 5 :(得分:0)

这是无效的:

return bover2a;
return radover2a;

return firstX;
return secondX;

你不能在java中的方法中双重返回,如果你想要这个,你需要遵循另一种方法,比如创建一个自定义对象并在其中返回两个值。

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

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