【问题标题】:java: variable is never read/cannot find symbol [duplicate]java:变量永远不会被读取/找不到符号[重复]
【发布时间】:2022-01-24 06:45:15
【问题描述】:

所以我必须创建一个 java 程序,使用以下方法计算圆的直径和面积:setRadius() 和 getRadius()。 setRadius() 也必须用于计算这两个值并设置半径。我使用构造函数将半径指定为 1,但我还必须计算更大圆的直径/面积。运行代码时,它在系统打印行中显示“找不到符号”的直径。这是我到目前为止的代码:

class My_Circle extends Main{
    float radius = 1;
    
    public float getRadius() {
        return radius;
    }
    
    public void setRadius(float newRadius) {
        this.radius = newRadius;
        float diameter = radius*2;
        float area = radius*radius*3.14159265359f;
    }
}

public class Main {
    public static void main(String args[]) {
        My_Circle large = new My_Circle();
        My_Circle original = new My_Circle();
        
        large.setRadius(100);
        original.setRadius(original.getRadius());
        
        System.out.println("Large Circle Diameter: " + diameter);
        
    }
}

【问题讨论】:

  • diameter 在您的 main 方法中不可见。
  • @Arnaud 一个愚蠢的问题,但是,我该如何解决?
  • 退后一步。问问自己:您将radius 设为全班的字段。但是你也在这个或那个方法中定义了 local 变量。问问自己:什么应该在哪里可见?!你看......局部变量直径和面积存在于setRadius()方法中。
  • 提示:也许,您可以添加 2 个其他方法,而不是计算该 setMethod 中的这两个值:getDiameter()getArea()。然后,当您需要 Circle 对象的直径时,只需调用这些方法(或者您可以将这两个数字作为字段添加到您的类中,并计算一次)。请注意:您可以使用构造函数而不是 setter。而且:没有理由让您的 Circle 类扩展 Main。请记住:您必须了解您放入源代码的每个字符。您不能从 Main 扩展 Circle,因为您 可以
  • 您只使用那些有意义要使用的结构。示例:如果您有一个“Shape”基类,那么从它扩展 Circle 是有意义的。但是您的 Main 类只是入口点,是用于最终调用某些代码的“驱动程序”。无需将 Circle 设为 Main。

标签: java geometry calculator


【解决方案1】:

diameter 超出 Main 类的范围,因为 diameter 仅在您调用 setRadius() 时声明 您需要以与声明 radius 相同的方式声明 diameterarea

class My_Circle extends Main{
float radius = 1;
float diameter = radius*2;
float area = radius*radius*3.14159265359f;

此外,您需要为直径创建一个 getter 方法(就像您为半径所做的那样)

【讨论】:

  • 这是个坏建议。您在那里的另外两个字段......将使用半径 1。所以当设置器被调用时,其他值将保持在最初计算的数字。因此,如果您真的想提供帮助,请给出一个完整的示例来解决代码中的所有问题。
【解决方案2】:

首先,您的 My_Circle 类不应继承自 Main(删除扩展)。然后你不能得到变量直径,因为它没有在 Main 类的任何地方引用。如果您想要大圆的直径,只需执行 large.getRadius() * 2 或以与半径相同的方式添加直径变量。这样你就可以做 large.getDiameter()。

【讨论】:

  • 那么你无法获得变量直径,因为它没有在 Main 类的任何地方引用。 完全错误。这不是关于在另一个地方 引用,而是关于一个方法的 local 变量不在另一个方法的范围内的事实。请理解这里的所有内容都应该具有良好的质量。如果您缺乏清楚地表达正确答案的知识,请考虑不要将其写下来作为答案。
猜你喜欢
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
  • 2016-01-31
  • 2013-11-22
  • 2012-09-09
  • 2015-12-15
相关资源
最近更新 更多