无法识别的符号变量(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);
应该可以。
我有一个 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);
应该可以。