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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 毕仁杰 黑马帝   /  2011-7-18 20:26  /  2566 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

从5月底第一次看黑马训练营,就深深的被他吸引……
先谈谈一个面试题,前段时间看方老师javaweb的视频直播时,打印的图形如下
   3     7
  2  4  6  8
1     5      9
我写的代码如下:但是程序的通用性不强,只能输出小于100的数,要是想打印更大的数,还得改程序(如注释掉的,按这个方式下去写)。我总感觉这样写太傻了。期待准黑马们有更好的方法,有的话,贴上代码,感激不尽……[code=java]package cn;

import java.util.Scanner;

public class draw {
       
        public static void main(String[] args) {
                show();
        }
       
        static void show(){
                int num ;
                System.out.print("输入要排列的数:");
                Scanner input = new Scanner(System.in);
                num = input.nextInt();
                int a = 1;
                int height = num/4 + 1;
                int width = num;
                String tab = "";
                int arr[][] = new int[height][width];
                int x = height -1;
                int y = 0;
                boolean flag = false;
                int num1 = num/10;
               
                while(num1%10 != 0){
                        a++;
                        num1 = num1/10;
                }
                for(int i =1;i<= a;i++){
                        tab =tab + " ";
                }
                for(int i =1;i<= num;i++){
                        arr[x][y] = i;
                        y++;
                        if(!flag){
                                x--;
                        }
                        if(flag){
                                x++;
                        }
                        if(x<0){
                                flag = true;
                                x = x + 2;
                        }
                        if(x>height -1){
                                flag = false;
                                x = x -2;
                        }
                }
               
                for(int i =0;i< arr.length;i++){
                        for(int j =0;j<arr.length;j++){
                                if(arr[j] != 0){
                                        if(a==1){
                                                System.out.format("%1s", arr[j]);
                                        }else if(a ==2){
                                                System.out.format("%2s", arr[j]);
                                        }//else if(a == 3){
                                                //System.out.format("%3s", arr[j]);
                                        //}
                                }else{
                                        System.out.print(tab);
                                }
                        }
                        System.out.println();
                }
        }

}[/code]我学数学的,自学java也有1年多了,对j2se也弄的差不多了,现在准大四,9月底学校才放人去实习,唉,估计是赶不上黑马3期了。
[ 本帖最后由 毕仁杰 于 2011-07-18  20:41 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
admin + 2 一起等待马友的参与

查看全部评分

9 个回复

倒序浏览
黑马网友  发表于 2011-7-19 09:20:51
沙发
昨晚看的视频,学习一下,最后就是格式不大整齐,老师给留的作业,我想了半天,增加了个打印空格的函数,然后判断数字是不是在M形的第二个顶点和第最后一个低点,如果是就在数字前打印相应的空格,你看一下是不是符合你的要求啊

package string;

public class Mshape {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub

                int num=90;
                String str=Integer.toString(num);
                int height=num/4+1;
                int weight=num;
               
                int arr[][]=new int[height][weight];
               
                int x=height-1;
                int y=0;
               
                boolean order=false;
                for(int i=1;i<=num;i++){
                        arr[x][y]=i;
                        y++;
                        if(order==false){
                                x--;
                        }
                        if(order==true){
                                x++;
                        }
                        if(x<0){
                                order=true;
                                x=x+2;
                        }
                        if(x>height-1){
                                order=false;
                                x=x-2;
                        }
                }
                for(int i=0;i<arr.length;i++){
                        for(int j=0;j<arr[i].length;j++){
                                if(arr[i][j]!=0){
                                        if(arr[i][j]<=9){
                                                System.out.print(" "+arr[i][j]);

                                        }else{
                                                if((arr[i][j]==(num/4)*3+1)||(arr[i][j]==(num/4)*4+1)){//M型最后一个高点和最有一个点判断
                                                        printspace(str.length()-1);//打印相应的空格
                                                        System.out.print(arr[i][j]);
                                                }else {
                                                        System.out.print(arr[i][j]);
                                                }
                                               
                                        }
                                       
                                }else{
                                        System.out.print(" ");
                                }
                        }
                        System.out.println();
                }
               
        }
       
        public static void printspace(int numspace) {//打印空格函数
               
                for(int n=0;n<numspace;n++){
                        System.out.print(" ");
                }
               
               
        }
       

}
回复 使用道具 举报
黑马网友  发表于 2011-7-19 09:30:28
藤椅

回复 沙发 的帖子

哥们: 你的程序确定编译通过了吗?或是贴程序时出错了??!
回复 使用道具 举报
黑马网友  发表于 2011-7-19 09:49:28
板凳
我的包名跟你不一样
回复 使用道具 举报

回复 板凳 的帖子

包名和类名全改了     有明显的编译错误  数组的表示有问题
  1.   if(arr[j]!=0){
  2.                                     if(arr[j]<=9){
  3.                                             System.out.print(" "+arr[j]);

  4.                                     }else{
  5.                                             if((arr[j]==(num/4)*3+1)||(arr[j]==(num/4)*4+1)){//M型最后一个高点和最有一个点判断
复制代码
[ 本帖最后由 毕仁杰 于 2011-07-19  10:01 编辑 ]
回复 使用道具 举报
黑马网友  发表于 2011-7-19 12:11:23
地板
package string;

public class Mshape {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub

                int num=90;
                String str=Integer.toString(num);
                int height=num/4+1;
                int weight=num;
               
                int arr[][]=new int[height][weight];
               
                int x=height-1;
                int y=0;
               
                boolean order=false;
                for(int i=1;i<=num;i++){
                        arr[x][y]=i;
                        y++;
                        if(order==false){
                                x--;
                        }
                        if(order==true){
                                x++;
                        }
                        if(x<0){
                                order=true;
                                x=x+2;
                        }
                        if(x>height-1){
                                order=false;
                                x=x-2;
                        }
                }
                for(int i=0;i<arr.length;i++){
                        for(int j=0;j<arr[i].length;j++){
                                if(arr[i][j]!=0){
                                        if(arr[i][j]<=9){
                                                System.out.print(" "+arr[i][j]);

                                        }else{
                                                if((arr[i][j]==(num/4)*3+1)||(arr[i][j]==(num/4)*4+1)){//M型最后一个高点和最有一个点判断
                                                        printspace(str.length()-1);//打印相应的空格
                                                        System.out.print(arr[i][j]);
                                                }else {
                                                        System.out.print(arr[i][j]);
                                                }
                                               
                                        }
                                       
                                }else{
                                        System.out.print(" ");
                                }
                        }
                        System.out.println();
                }
               
        }
       
        public static void printspace(int numspace) {//打印空格函数
               
                for(int n=0;n<numspace;n++){
                        System.out.print(" ");
                }
               
               
        }
       

}
回复 使用道具 举报
黑马网友  发表于 2011-7-19 12:12:48
7#
arr[j]<=9这个地方应该是a[i][j],不知道为啥粘贴不上去
回复 使用道具 举报
黑马网友  发表于 2011-7-19 12:13:12
8#
arr[i]    [j]
回复 使用道具 举报
黑马网友  发表于 2011-7-19 12:13:43
9#
[code]package string;

public class Mshape {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub

                int num=90;
                String str=Integer.toString(num);
                int height=num/4+1;
                int weight=num;
               
                int arr[][]=new int[height][weight];
               
                int x=height-1;
                int y=0;
               
                boolean order=false;
                for(int i=1;i<=num;i++){
                        arr[x][y]=i;
                        y++;
                        if(order==false){
                                x--;
                        }
                        if(order==true){
                                x++;
                        }
                        if(x<0){
                                order=true;
                                x=x+2;
                        }
                        if(x>height-1){
                                order=false;
                                x=x-2;
                        }
                }
                for(int i=0;i<arr.length;i++){
                        for(int j=0;j<arr[i].length;j++){
                                if(arr[i][j]!=0){
                                        if(arr[i][j]<=9){
                                                System.out.print(" "+arr[i][j]);

                                        }else{
                                                if((arr[i][j]==(num/4)*3+1)||(arr[i][j]==(num/4)*4+1)){//M型最后一个高点和最有一个点判断
                                                        printspace(str.length()-1);//打印相应的空格
                                                        System.out.print(arr[i][j]);
                                                }else {
                                                        System.out.print(arr[i][j]);
                                                }
                                               
                                        }
                                       
                                }else{
                                        System.out.print(" ");
                                }
                        }
                        System.out.println();
                }
               
        }
       
        public static void printspace(int numspace) {//打印空格函数
               
                for(int n=0;n<numspace;n++){
                        System.out.print(" ");
                }
               
               
        }
       

}[/code]

评分

参与人数 1技术分 +4 收起 理由
admin + 4 哥们都要跟你加分,我就不多说了

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-19 12:32:14
10#

回复 9 # 的帖子

首先肯定哥们的钻研的精神,希望管理员给这个哥们一个较高的分数
你的程序我看了下,想法不错!
请测试下  num 为9   或  156  的时候   ,排版又出现了问题。呵呵 ……

评分

参与人数 1技术分 +1 收起 理由
admin + 1 你这美德,值得再次加分

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马