A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 姚伟涛 中级黑马   /  2012-4-16 18:19  /  1396 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这是一个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");};
      
        
      
    }
}

5 个回复

倒序浏览
1、那两个r是不同的一个是构造函数里面定义的参数变量,另一个是setRadius()方法里面的参数变量。
2、public Circle(double r){setRadius(r);}这个是构造函数的重载,你调用的是重载后的构造函数。
回复 使用道具 举报
两个 r 是同一个意思。
public Circle(double r)  这句定义了带参数的构造函数,用这个类定义对象的时候就要加上参数。
回复 使用道具 举报
那两个r是两个函数里面的 参数变量,名称 可以用其他的字母。两个r没有必然联系。
   main class里的circle = new Circle(radius);这是调用带参数的构造方法 public Circle(double r){
     setRadius(r);}  如果不想调用 可以在 class Circle里面在定义一个 空参数的Circle(){},不过 你这个函数中用的是构造函数赋值。所以要带参数的
回复 使用道具 举报
两个r 都是设置半径,前一个是构造函数初始化半径,后一个是设置半径的成员方法,可以用不同的字母。。。
回复 使用道具 举报
本帖最后由 郭建峰_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是形参,把传递进来的值赋给实参。
        }
}
你要解决的问题是:理解实参和形参的差别,明白了这个道理。就懂了上面的代码了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马