【问题标题】:unrecognized symbol variable (JAVA) [closed]无法识别的符号变量(JAVA)[关闭]
【发布时间】:2015-08-24 17:45:40
【问题描述】:

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

【问题讨论】:

  • 需要看代码。您应该可以将其粘贴进去。如果格式不正确,我相信有些人可能会为您编辑它。
  • 只需粘贴您的代码,并确保每行至少有四个缩进空格。现在请edit这个问题。
  • 复制粘贴代码。
  • 如果您不知道如何在这里发布代码,至少您可以通过 google 搜索解决方案,就像这个一样简单。

标签: java polynomial-math


【解决方案1】:

根据你的截图:

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

此时需要创建一个参数作为容器来获取返回的rad值。 例如:在你的 main 方法中

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

应该可以的。

【讨论】:

  • 我是 Java 新手,你认为你可以 PM 我并更深入地解释一下
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 你能给我一个使用我的代码的例子吗?我通读了它,但我不确定我是否理解这一点。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      这是无效的:

      return bover2a;
      return radover2a;
      

      return firstX;
      return secondX;
      

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

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

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

      【讨论】:

        【解决方案6】:

        查看屏幕截图,radicand 在 Main 中不可用,因为它不像您想象的那样“全局”,而是一个局部变量。如果你想让radicand 成为一个全局变量,它应该在某个类中声明为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,这应该被视为最后的手段。你现在似乎正在编写只有一个类的程序,但是当您正在处理多个类,您想要在它们之间公开的任何变量都应声明为 private 并使用 getter 和 setter 方法访问。

        【讨论】:

          猜你喜欢
          • 2018-11-12
          • 1970-01-01
          • 2021-01-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-18
          • 1970-01-01
          • 2016-11-28
          相关资源
          最近更新 更多