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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨华东 中级黑马   /  2012-10-14 11:28  /  1575 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨华东 于 2012-10-21 20:15 编辑

我弱弱的问一哈   有会用for循环打印圆的吗??(相似就行)

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
有啊,代码如下:
public class PrintCircle {
/**
  * 参数为半径
  *
  * @param r
  */
public static void printCricle(int r) {
  StringBuffer sb = new StringBuffer();
  for (int i = 0; i <= 2 * r; i++) {
   int[] ys = getY(i, r);
   
   for (int y = 0; y <= ys[1]; y++) {
    if (y == ys[1]) {
     // 如果为最后一个星号,则换行
     sb.append("*\r\n");
    } else if (y == ys[0]) {
     // 第一个星号
     sb.append('*');
    } else {
     // 空格
     sb.append(' ');
    }
   }
  }
  System.out.println(sb);
}

/**
  *
  * 公式:(x-r)^2 +(y-r)^2 = r^2
  * 根据行数,算出列向的两个坐标 y = r +(-) 根号(2xr-x^2)
  * 其中是radix是行距和列距的比例,可以调一下
  *
  * @param x
  * @return
  */
private static int[] getY(int x, int r) {
  double radix = 2.2;
  int[] ys = new int[2];
  double sqrt = Math.sqrt(2 * x * r - x * x);
  ys[0] = (int) ((r - sqrt) * radix);
  ys[1] = (int) ((r + sqrt) * radix);
  return ys;
}

public static void main(String[] args) {
  printCricle(20);
}
}

看看行不

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
xuewuzhijing 发表于 2012-10-14 14:45
有啊,代码如下:
public class PrintCircle {
/**

                                            *
                              *                          *
                        *                                      *
                    *                                              *
                 *                                                    *
              *                                                          *
            *                                                              *
          *                                                                  *
        *                                                                      *
       *                                                                        *
     *                                                                            *
    *                                                                              *
   *                                                                                *
  *                                                                                  *
  *                                                                                  *
*                                                                                    *
*                                                                                      *
*                                                                                      *
*                                                                                      *
*                                                                                      *
*                                                                                       *
*                                                                                      *
*                                                                                      *
*                                                                                      *
*                                                                                      *
*                                                                                    *
  *                                                                                  *
  *                                                                                  *
   *                                                                                *
    *                                                                              *
     *                                                                            *
       *                                                                        *
        *                                                                      *
          *                                                                  *
            *                                                              *
              *                                                          *
                 *                                                    *
                    *                                              *
                        *                                      *
                              *                          *
                                            *
结果出乎意料啊  你说说  在Java中有木有封装好的Math类的功能  可以打印呢??我找了  好像没有  那这就遇到问题了
简单的打印圆  怎么就搞不出来呢??郁闷啊   网上的代码  根本行不通
回复 使用道具 举报
class LX
{
    public static void main(String[] args)
        {   
        paint(15); //半径15   
    }   
    public static void paint(int r)
        {   
     //假定圆心在坐标(r,r);   
        int y = r * 2; //y的坐标开始   
        int x = 0;   
        int c = 0; //中间空格数量   
        int z = 2; //每行递减量   
        for (int j = r * 2; j >= 0; j=j-z)
                {   
            x = getX(r, y);   
            System.out.print(getSpace(x) + "*");   
            c = (r-x)*2;   
            System.out.println(getSpace(c) + "*");   
            y-=z;   
        }   
    }   
    public static int getX(int r, int y)
        {   
        //解圆标准方程的   
        int x = y - r;         
        double t = Math.sqrt((r * r) - (x * x));   
        return (int) Math.round(r-t);   
    }   
    public static String getSpace(int i)
        {   
        String s = "";   
        for (int j = 0; j < i; j++)
                {   
            s += " ";   
        }   
        return s;
        }

}
回复 使用道具 举报
去百度一大堆
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马