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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑广昌 中级黑马   /  2012-12-29 11:27  /  1302 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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呢?

4 个回复

倒序浏览
因为返回值是return max;,返回的是最大的那个下标,return cir[max].radius;就可以返回最大的半径了
回复 使用道具 举报
Tom 初级黑马 2012-12-29 11:50:17
藤椅
楼上正解。
回复 使用道具 举报
if (cir[x].radius>cir[max].radius)看这个,当x=1时成立,max=1,当x=2时成立,max=2,当x=3时数组就为空了所以不成立,compare方法返回max,这时max=2,因为是double类型的,所以结果就是2.0嘛
回复 使用道具 举报
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;
        }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马