RT 各位可否赐教一下编程的思路

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【jckzhang】截止到2008-07-05 09:46:29的历史汇总数据(不包括此帖):
    发帖的总数量:8                        发帖的总分数:120                      
    结贴的总数量:4                        结贴的总分数:40                       
    无满意结贴数:2                        无满意结贴分:40                       
    未结的帖子数:4                        未结的总分数:80                       
    结贴的百分比:50.00 %               结分的百分比:33.33 %                  
    无满意结贴率:50.00 %               无满意结分率:100.00%                  
    楼主加油
      

  2.   

    回去看一下awt或swing 的draw类吧...
      

  3.   

    找到这样一段代码,各位可否解释一下,一点都看不懂
    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++;
     }
    }
    }
      

  4.   

    代码
    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++; 
           } 
         } 

      

  5.   

    界面实现方法是新建一个Canvas类..然后在canvas上画图..调用Graphics中方法..你看下draw...至于如何实现哪就是算法的问题了.
      

  6.   

    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();
            }
        }
    }分析如下:菱形是一个上下、左右对称的图形,行列可以按照下面的方式来进行循环
        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 时
    才输出 *,否则输出空格。因此,这样我们就利用于图形的对称性完成了菱形的输出。
      

  7.   


    个人觉得火龙果非常的诚恳非常的细致非常的大气,火龙果回答过我的那个打印图形的问题。真的让我耳目一新,图形还可以这么来打印啊!
    用自己的语言来说就是:函数在矩阵中的隐性应用,当然我那天的那个图形打印是一次函数在矩阵中的隐性应用啦!
    函数在矩阵中的隐性应用这种方法,我们再来看看这个哥们儿的菱形打印就变得非常的简单明了了。
    代码最有说服力public class Graphics4 {
    public static void main(String[] args) {
    printDiamond(10);
    } public static void printDiamond(int line) {
    line = (line % 2 == 0 ? line + 1 : line);
    System.out.println(line);
    int  k = line / 2 + 1;
    for (int i = -k; i <= k; i++) {
    int a = Math.abs(i);
    for (int j = -k; j <= k; j++) {
    int b = Math.abs(j);
    System.out.print((a == k || b == k || a + b  < k) ? "* ": "  ");
    //(a+b)与k的关系的变化,可以演变出很多不同的形式
    }
    System.out.println();
    }
    }
    }结果:
    11
    * * * * * * * * * * * * * 
    *           *           * 
    *         * * *         * 
    *       * * * * *       * 
    *     * * * * * * *     * 
    *   * * * * * * * * *   * 
    * * * * * * * * * * * * * 
    *   * * * * * * * * *   * 
    *     * * * * * * *     * 
    *       * * * * *       * 
    *         * * *         * 
    *           *           * 
    * * * * * * * * * * * * *
    如果要去掉边框,只需把System.out.print((a == k || b == k || a + b  < k) ? "* ": "  ");中的 a == k || b == k || 去掉。
    看看去掉边框的结果吧:
                              
                 *             
              * * *           
            * * * * *         
          * * * * * * *       
        * * * * * * * * *     
      * * * * * * * * * * *   
        * * * * * * * * *     
          * * * * * * *       
            * * * * *         
              * * *           
                *      
    改变菱形的形状:
    1.可以修改i、j 的上限值,本次是k     
    2.可以改变 a + b  < k中a、b的系数
    说白了,就是对一个一次函数的ax+by+c=0的修改,从而改变在四个象限的形状(注:x、y取整数)。
    如果加上一些什么二次函数、特殊函数,那么我们可以搞出很奇妙的图形来哦!
    试试吧!
    说这么多,其实只有一个:学习方式。了解了背后才会游刃有余,变幻无穷。就像真正的真理是简单的,是不会难为人的,如果一个东西你觉得很难,那么多半是你还没有更深入,安静下来慢慢研究一下,为自己喝彩!
    哎,不就是一个图形打印嘛!说了这么多,是不是太自作多情了。拍砖吧!O(∩_∩)O哈哈~