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