黑马程序员技术交流社区

标题: 高人指点啊 [打印本页]

作者: 姚伟涛    时间: 2012-4-16 18:19
标题: 高人指点啊
这是一个class里的代码,我想请问Circle里的public Circle(double r){setRadius(r);}里面的r和下面 public void setRadius(double r)里的r是同一个意思吗?
还有就是main class里的circle = new Circle(radius);这里为什么要有参数radius啊?谢谢高人指点啊
public class Circle
{
  public static final int INVALID_DIMENSION = -1;
  private double radius;
  public Circle(double r){
    setRadius(r);}
   
  public double getArea() {
      double result = 1;
      if (isRadiusValid()){
          result = Math.PI*radius*radius;
        }
        return result;
    }
  public double getCircumference() {
      double result = INVALID_DIMENSION;
      if(isRadiusValid()){
          result = 2.0*Math.PI*radius;
        }
        return result;
    }
   
   public double getDiameter(){
       double diameter = INVALID_DIMENSION;   
       if(isRadiusValid()){
           diameter = 2.0*radius;
        }
        return diameter;
    }
   
    public double getRadius(){
        return radius;
    }
   
      public void setRadius(double r) {
          if(r>0){
              radius = r;
            }else{
                radius = INVALID_DIMENSION;
            }
        }
   
  
    private boolean isRadiusValid(){
        return radius != INVALID_DIMENSION;
    }
}


这是另一个class
import java.util.*;
public class Main
{
    public static void main(String[] args) {
        double radius,circumference,area;
        Circle circle;
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter radius:  ");
        radius = scanner.nextDouble();
        circle = new Circle(radius);
        circumference = circle.getCircumference();
        area = circle.getArea();
        if(radius>0) {System.out.println("Input radius: " + radius);
                       System.out.println("Circumference " + circumference);
                        System.out.println("Area: " + area);}else{
                System.out.println("Cannot");};
      
        
      
    }
}
作者: 陈扬    时间: 2012-4-16 18:31
1、那两个r是不同的一个是构造函数里面定义的参数变量,另一个是setRadius()方法里面的参数变量。
2、public Circle(double r){setRadius(r);}这个是构造函数的重载,你调用的是重载后的构造函数。
作者: 张明星    时间: 2012-4-16 18:35
两个 r 是同一个意思。
public Circle(double r)  这句定义了带参数的构造函数,用这个类定义对象的时候就要加上参数。
作者: 魏明明    时间: 2012-4-16 18:39
那两个r是两个函数里面的 参数变量,名称 可以用其他的字母。两个r没有必然联系。
   main class里的circle = new Circle(radius);这是调用带参数的构造方法 public Circle(double r){
     setRadius(r);}  如果不想调用 可以在 class Circle里面在定义一个 空参数的Circle(){},不过 你这个函数中用的是构造函数赋值。所以要带参数的
作者: 张明星    时间: 2012-4-16 18:52
两个r 都是设置半径,前一个是构造函数初始化半径,后一个是设置半径的成员方法,可以用不同的字母。。。
作者: 郭建峰_xiao5    时间: 2012-4-16 18:57
本帖最后由 郭建峰_xiao5 于 2012-4-16 19:02 编辑

我这样解释一下吧:
写个简单一点的代码,注释做解释:
public class Demo{
         int i;//注意:这个地方的i是实参,即实际的参数
         public Demo(int i) {//这里的i是形式参数,也就是说在创建Demo对象时,往进传递的参数。表示这个地方可以传int 类型的变量
              this.i = i;//this.i是用this关键字获取实参,i是形参,把传递进来的值赋给实参。
        }
}
你要解决的问题是:理解实参和形参的差别,明白了这个道理。就懂了上面的代码了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2