【问题标题】:Circle functions not behaving as expected in Java Class循环函数在 Java 类中的行为不符合预期
【发布时间】:2010-10-23 09:46:00
【问题描述】:

所以我做了一个圆形类来设置半径,并且应该输出半径,周长和面积但是,如果我输入半径,半径,周长,面积不会输出回来,它只显示为 0.0 这是我的 Circle.java

public class Circle
{
    private double radius;
    private double PI = 3.14159;

    public void setRadius(double rad)
    {
            radius = rad;
    }

    public double getRadius()
    {
            return radius;
    }

    public double getArea()
    {
            return PI * radius * radius;
    }

    public double getDiameter()
    {
            return 2 * radius;
    }

    public double getCircumference()
    {
            return 2 * PI * radius;
    }

}

这里是 circledemo.java http://pastie.org/466414 - 格式化在这里不好

首先我输入了半径,但是当我调用getRadius,圆周,面积时,它只输出0.0

【问题讨论】:

  • 可能格式不正确,因为您使用制表符而不是空格缩进。
  • 那么....它输出的错误是什么??
  • 所以我输入了半径,但是当我调用 getRadius,circumference, area 时,它只输出 0.0

标签: java class methods public


【解决方案1】:

让我们一步一步地看一下程序的执行。首先,初始化一些变量,然后创建一个 Scanner 对象。接下来,您输入一个while 循环。在 while 循环中,您显示主菜单,从键盘读取输入,创建一个新的 Circle 对象,然后处理您收到的输入。然后你一直这样做,直到flag 设置为false,在这种情况下程序退出。

注意到这里有什么奇怪的地方吗?

一个变量只存在于它被声明的范围内,你的 Circle 对象是在 while 循环声明的。请记住,while 循环的主体代表 while 循环的一次迭代。因此,本质上,您的 Circle 对象会一遍又一遍地重新创建,这就是 setRadius() 无效的原因。

【讨论】:

  • 一个好的经验法则是,每次看到 { 时,您都在进入一个新范围,每次看到 } 时,您都在离开它。这意味着当您到达 } 时,在一对 {} 中声明的任何内容都会超出范围。我可能有点过于简单化了,但这给了你我认为的正确想法。此外,最好在每个 { 处增加缩进,然后在每个 } 处减少它。
  • @Raptrex 如果@htw 的答案是您接受为正确的答案,您可以将答案标记为“已接受”(通过单击答案旁边的复选标记),这是一种礼貌。
【解决方案2】:

在 while 循环之外创建 Circle 对象实例(即代码 Circle one = new Circle())。循环的每次迭代都会导致对象以新状态(即新半径)重新创建。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 2014-10-04
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多