首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 如何用JAVA画一个菱形 [已结贴,结贴人:jckzhang]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-05 09:46:32 楼主
    RT 各位可否赐教一下编程的思路
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-05 09:46:341楼 得分:0
    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【jckzhang】截止到2008-07-05 09:46:29的历史汇总数据(不包括此帖):
    发帖的总数量:8                        发帖的总分数:120                     
    结贴的总数量:4                        结贴的总分数:40                     
    无满意结贴数:2                        无满意结贴分:40                     
    未结的帖子数:4                        未结的总分数:80                     
    结贴的百分比:50.00 %              结分的百分比:33.33 %                 
    无满意结贴率:50.00 %              无满意结分率:100.00%                 
    楼主加油
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-05 09:48:522楼 得分:0
    回去看一下awt或swing 的draw类吧...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-05 10:02:103楼 得分:0
    找到这样一段代码,各位可否解释一下,一点都看不懂
    class a2{
    public static void main(String args[])
    {
      int N=5;
    int i=1,j,k,m;
    for(m=1;m <=2*N-1;m++)
    {
      for(j=1;j <=Math.abs(N-i);j++)
      System.out.print(' ');
      k=N-Math.abs(N-i);
      for(j=1;j <=2*k-1;j++)
      System.out.print('*');
      System.out.println();
      i++;
    }
    }
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-05 10:05:354楼 得分:0
    代码
    Java code
    class a2 { public static void main(String args[]) { int N=5; int i=1,j,k,m; for(m=1;m <=2*N-1;m++) { for(j=1;j <=Math.abs(N-i);j++) System.out.print(' '); k=N-Math.abs(N-i); for(j=1;j <=2*k-1;j++) System.out.print('*'); System.out.println(); i++; } } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • FL1429
    • 等级:
    发表于:2008-07-05 10:24:085楼 得分:5
    界面实现方法是新建一个Canvas类..然后在canvas上画图..

    调用Graphics中方法..你看下draw...

    至于如何实现哪就是算法的问题了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-05 10:43:466楼 得分:0
    引用 5 楼 FL1429 的回复:
    界面实现方法是新建一个Canvas类..然后在canvas上画图..

    调用Graphics中方法..你看下draw...

    至于如何实现哪就是算法的问题了.
    不用界面,直接在控制台窗口中实现
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-05 14:58:267楼 得分:15
    Java code
    public class Test { public static void main(String[] args) { printDiamond(7, true); System.out.println(); printDiamond(7, false); } /** * 输出菱形 * @param line 菱形的行数 * @param isSolid 是否为实心 */ private static void printDiamond(int line, boolean isSolid) { line = line % 2 == 0 ? line + 1 : line; for(int k = line / 2, i = -k; i <= k; i++) { for(int j = -k, m = k - Math.abs(i); j <= m; j++) { boolean b; if(isSolid) { b = Math.abs(j) + Math.abs(i) > k; } else { b = Math.abs(j) + Math.abs(i) != k; } System.out.print(b ? " " : "*"); } System.out.println(); } } }


    分析如下:

    菱形是一个上下、左右对称的图形,行列可以按照下面的方式来进行循环

    Java code
    j= -3 -2 -1 0 1 2 3 i= +---+---+---+---+ -3 | | | | * | +---+---+---+---+---+ -2 | | | * | * | * | +---+---+---+---+---+---+ -1 | | * | * | * | * | * | +---+---+---+---+---+---+---+ 0 | * | * | * | * | * | * | * | +---+---+---+---+---+---+---+ 1 | | * | * | * | * | * | +---+---+---+---+---+---+ 2 | | | * | * | * | +---+---+---+---+---+ 3 | | | | * | +---+---+---+---+


    行数为 7,则 7/2 = 3,这个数值很有用处,暂且称为 K。

    i 和 j 的循环起始均为 -K,而 i 的终止循环为 K,j 的终止循环条件理应为 K,
    注意右边,我特意把它挖空了,因为右边的都是空格,为了优化程序就没有必要输
    出了,这样 j 的循环终止条件与 i 是有密切关系的,为 K - Math.abs(i),即:
    当 i = -1 时,K - Math.abs(i) = 2,因此 j 只要从 -3 循环到 2 就可以了。

    再看看 * 位置上的规律,注意最左边的 *,在 Math.abs(i) + Math.abs(j) > K 时
    输出的是空格,小于等于 K 时,输出的是 *。

    在 i = -2, j = -2 坐标上,Math.abs(i) + Math.abs(j) = 4,4 是大于 K 的,因此输出空格
    若 i = -2, j = -1 坐标上,Math.abs(i) + Math.abs(j) = 3,3 是不大于 K 的,因此输出 *

    如果需要的是空心菱心,只要把判断条件设为 Math.abs(i) + Math.abs(j) == K 时
    才输出 *,否则输出空格。

    因此,这样我们就利用于图形的对称性完成了菱形的输出。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-05 15:35:128楼 得分:0
    谢谢 你的解释
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved