循环函数在 Java 类中的行为不符合预期

Posted

技术标签:

【中文标题】循环函数在 Java 类中的行为不符合预期【英文标题】:Circle functions not behaving as expected in Java Class 【发布时间】: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 【参考方案1】:

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

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

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

【讨论】:

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

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

【讨论】:

以上是关于循环函数在 Java 类中的行为不符合预期的主要内容,如果未能解决你的问题,请参考以下文章

带有指针值的 Go 通道在 for 循环中的行为不符合预期[重复]

Android - fill_parent 在RelativeLayout 中的行为不符合预期

负前瞻行为不符合预期

R (e1071) 中的朴素贝叶斯分类器的行为不符合预期(简单示例)

NSArrayController 和 Core Data 的行为不符合预期

jQuery 选择器在从 ajax 解析的 HTML 中的行为不符合预期