循环函数在 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) 中的朴素贝叶斯分类器的行为不符合预期(简单示例)