小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。
   
   为了便于比对空格,所有的空白位置都以句点符来代替。
   要求输入两个整数m n,表示笔的宽度,X的高度。用空格分开(0<m<n, 3<n<1000, 保证n是奇数)
   
   要求输出一个大X
   例如,用户输入:
   
   3 9
   
   程序应该输出:
   
   ***…..***
   
   .***…***.
   
   ..***.***..
   
   …*****…
   
   ….***….
   
   …*****…
   
   ..***.***..
   
   .***…***.
   
   ***…..***
(如有对齐问题,参看【图1.jpg】)
   再例如,用户输入:
   
   4 21
   
   程序应该输出
   
   ****…………….****
   
   .****…………..****.
   
   ..****…………****..
   
   …****……….****…
   
   ….****……..****….
   
   …..****……****…..
   
   ……****….****……
   
   …….****..****…….
   
   ……..********……..
   
   ………******………
   
   ……….****……….
   
   ………******………
   
   ……..********……..
   
   …….****..****…….
   
   ……****….****……
   
   …..****……****…..
   
   ….****……..****….
   
   …****……….****…
   
   ..****…………****..
   
   .****…………..****.
   
   ****…………….****
   (如有对齐问题,参看【图2.jpg】)
   
   
   资源约定:
   
   峰值内存消耗(含虚拟机) < 256M
   
   CPU消耗  < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
   所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
   
   注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
   
   注意:主类的名字必须是:Main,否则按无效代码处理。
   
   ===============================================================
   
   打印演示:
   
   2 5
   
   **..**
   
   .****.
   
   ..**..
   
   .****.
   
   **..**
   1 5
   
   *…*
   
   .*.*.
   
   ..*..
   
   .*.*.
   
   *…*
   1 7
   
   *…..*
   
   .*…*.
   
   ..*.*..
   
   …*…
   
   ..*.*..
   
   .*…*.
   
   *…..*
   2 7
   
   **….**
   
   .**..**.
   
   ..****..
   
   …**…
   
   ..****..
   
   .**..**.
   
   **….**
package tuxing;
import java.util.Scanner;
public class Xtu {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in); 
		final int ZIKUAN=input.nextInt();
		final int GAO=input.nextInt();
		final int KUAN=GAO-1+ZIKUAN;
		//上部分
		int zjDian=KUAN-ZIKUAN*2,bDian=0;
		for(int i=1;i<=GAO;i++){
			Dian.daDian(bDian);
			Xinhao.daXin(ZIKUAN);
			Dian.daDian(zjDian);	
			Xinhao.daXin(ZIKUAN);
			Dian.daDian(bDian);
			zjDian=zjDian-2;
			bDian++;
			System.out.println();
			if(zjDian<0){
				zjDian=zjDian+2;
				break;
			}
		}
//END   中间部分
		for(int i=1;i<=KUAN;i++){
			int jxin=KUAN-bDian*2;
			Dian.daDian(bDian);
			Xinhao.daXin(jxin);
			Dian.daDian(bDian);
			System.out.println();
			if(jxin==ZIKUAN){break;}
				bDian++;
		}	
//END    中下部分
		for(int i=1;i<=KUAN;i++){
			bDian--;
			int jxin=KUAN-bDian*2;
			Dian.daDian(bDian);
			Xinhao.daXin(jxin);
			Dian.daDian(bDian);
			System.out.println();
			if(jxin>=ZIKUAN*2-1){break;}	  //尽量不要用等于,用限定范围好
		}	
//End   后部分
		for(int i=1;i<=GAO;i++){
			bDian--;
			Dian.daDian(bDian);
			Xinhao.daXin(ZIKUAN);
			zjDian=zjDian+2;
			Dian.daDian(zjDian);
			Xinhao.daXin(ZIKUAN);
			Dian.daDian(bDian);
			System.out.println();
			if(bDian==0){return;}
		}
//End		
	}	
}
class Xinhao{
	static void daXin(int x){
		for(int i=1;i<=x;i++){
			System.out.print("*");
		}
	}	
}
class Dian{
	static void daDian(int x){
		for(int i=1;i<=x;i++){
			System.out.print(".");
		}
	}	
}
======================================================
   之前写的代码太不规范了。将对他们进行调整:
   
package com.aiqiongdiao;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);     //获取用户输入的数值
		int ziKuan=input.nextInt();   //获取字的厚度
		int gao=input.nextInt();     //获取字的高度
		int kuan=gao-1+ziKuan;		//计算字的宽度
		int zjDian=kuan-ziKuan*2;  //计算中间的点数
		int bDian=0;				
		for(int i=1;i<=gao;i++){
			daDian(bDian);
			daXin(ziKuan);
			daDian(zjDian);	
			daXin(ziKuan);
			daDian(bDian);
			zjDian=zjDian-2;
			bDian++;
			System.out.println();
			if(zjDian<0){
				zjDian=zjDian+2;
				break;
			}
		}
		//END   中间部分
		
		for(int i=1;i<=kuan;i++){
			int jxin=kuan-bDian*2;
			daDian(bDian);
			daXin(jxin);
			daDian(bDian);
			System.out.println();
			if(jxin==ziKuan){break;}
				bDian++;
		}	
	//END    中下部分
		for(int i=1;i<=kuan;i++){
			bDian--;
			int jxin=kuan-bDian*2;
			daDian(bDian);
			daXin(jxin);
			daDian(bDian);
			System.out.println();
			if(jxin>=ziKuan*2-1){break;}	  //尽量不要用等于,用限定范围好
		}	
	//End   后部分
		for(int i=1;i<=gao;i++){
			bDian--;
			daDian(bDian);
			daXin(ziKuan);
			zjDian=zjDian+2;
			daDian(zjDian);
			daXin(ziKuan);
			daDian(bDian);
			System.out.println();
			if(bDian==0){
				return;
			}
		}
	}//End
		
	public static void daXin(int ziKuan) {
		for(int i=1;i<=ziKuan;i++){
			System.out.print("*");
		}
	}
	private static void daDian(int bDian) {
		for(int i=1;i<=bDian;i++){
			System.out.print(".");
		}
	}	
}   感觉这种方法过于繁琐,打算再做一次简化版的,对打印题进行规范化。
   
   =====================================================
   
   思路:
   
   
   
   1.获取:m n,表示宽度高度
   
   
   
   2.计算:算出图像宽度,新建二位数组
   
   
   
   3.背景:填充所有的点
   
   
   
   4.函数:(左右两个)星号函数,每次打印宽度个数
   
   
   
   5.调用:每次调用从头打到尾
   
   
   
   
   优化版代码实现:
   
package com.aiqiongdiao;
import java.util.Scanner;
public class Main {
	
	/**
	 * 图案改变
	 * @param arr
	 */
	public static void gaiXin(String arr[][],int yqsd,int m){
		int x=0;
		int y=0;
		
		while(true){
			if(y>arr.length-1){break;}
			daXin(arr,m,x,y);	 //打印左斜
			daXin(arr,m,yqsd,y);  //打印右斜
			y++;   //头点改变
			x++;
			yqsd--;   //注意是减减
		}	
		return;
	}
	
	/**
	 * 图像打印
	 * @param arr
	 */
	public static void print(String arr[][]){
		for(int i=0;i<arr.length;i++){
			for(int j=0;j<arr[0].length;j++){
				System.out.print(arr[i][j]);
			}
			System.out.println();
		}		
	}
	
	/**
	 * 星号打印
	 * @param args
	 */
	public static void daXin(String arr[][],int m,int x,int y){
		for(int i=0;i<m;i++){
			arr[y][x]="*";
			x++;
		}	
	}
	
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		int m=input.nextInt();   //获取字宽度
		int n=input.nextInt();  //获取高度
		int kuan=n-1+m;        //计算宽度
		String arr[][]=new String[n][kuan];
		for(int i=0;i<arr.length;i++){	//填充背景
			for(int j=0;j<arr[0].length;j++){
				arr[i][j]=".";
			}
		}
		int yqsd=kuan-m;    //注意开始的位数调整好
		gaiXin(arr,yqsd,m);   //改图案图像
		print(arr);   //打印图像
	}
} 
