黑马程序员技术交流社区

标题: 学习中的疑惑,求解答! [打印本页]

作者: 郑广昌    时间: 2012-12-29 11:27
标题: 学习中的疑惑,求解答!
class Circle
{
private static double pi=3.14;
private double radius;
public Circle(double r)
{
  radius=r;
}
public static double compare(Circle[] cir)
{
  int max=0;
  for(int x=1;x<cir.length;x++)
  {
   if (cir[x].radius>cir[max].radius)//这里理解不清楚
    max=x;
  }
  return max;
}
}
class tc
{
public static void main(String[] args)
{
  Circle cir[]=new Circle[3];
  cir[0]=new Circle(1.0);
  cir[1]=new Circle(2.0);
  cir[2]=new Circle(3.0);
  System.out.println("最大半径值是:"+Circle.compare(cir));
}
}
运行结果是什么?我的结果怎么是2.0呢?
作者: 马志军    时间: 2012-12-29 11:43
因为返回值是return max;,返回的是最大的那个下标,return cir[max].radius;就可以返回最大的半径了

作者: Tom    时间: 2012-12-29 11:50
楼上正解。
作者: 李海鹏    时间: 2012-12-29 11:54
if (cir[x].radius>cir[max].radius)看这个,当x=1时成立,max=1,当x=2时成立,max=2,当x=3时数组就为空了所以不成立,compare方法返回max,这时max=2,因为是double类型的,所以结果就是2.0嘛
作者: 王进亮    时间: 2012-12-29 12:07
public static double compare(Circle[] cir) {
                int  max = 0;
                for (int x = 1; x <cir.length; x++) {
                        /*max=0;
                         * 第一次判断cir[1].radius>cir[0].radiur    即2.0>1.0吗       是        max=1;(max=x)
                         * 第二次判断cir[2].radius>cir[1].radiur    即3.0>2.0吗       是        max=2;(max=x)
                         */
                        if (cir[x].radius > cir[max].radius){
                                max = x;
                        }
                }
                //这里定义的是double类型,所以你要返回的也是double类型,但你返回的max是int
                //所以系统会给你自动提升类型。所以你返回的是2.0
                return max;
        }




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