常数变异的思考方法
当程序中有许多因素都在变动的时候,我们可以假设其中的某些变数为常数,把他们写成固定的死值。
将来再用变量替换。
常数变异典型应用
打印这个金字塔:
*
* *
* * *
* * * *
* * * * *
正常的思路:两层嵌套循环。
/* * * * * * * * * * * * * * * * */ package ConstantChange; public class PrintPyramid { public static void main(String[] args) { /*System.out.println(" *"); System.out.println(" * *"); System.out.println(" * * *"); // System.out.println(" * * * *"); // System.out.println(" * * * * *"); for(int i=0;i<17;i++){ System.out.print(" "); } for(int i=0;i<4;i++){ System.out.print("* "); } System.out.println(); for(int i=0;i<16;i++){ System.out.print(" "); } for(int i=0;i<5;i++){ System.out.print("* "); } System.out.println();*/ //尝试写双层循环,代替上述的这种写5次的三行循环。 //k 0 1 2 3 4 【k】 //? 20 19 18 17 16 【20-k】 //?? 1 2 3 4 5 【k+1】 for(int k=0;k<5;k++){ for(int i=0;i<20-k;i++){ System.out.print(" "); } for(int i=0;i<k+1;i++){ System.out.print("* "); } System.out.println(); } } }
* * * * * * * * * * * * * * *
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
/* A ABA ABCBA ABCDCBA ABCDEDCBA */ package ConstantChange; public class LetterPyramid { public static void main(String[] args) { /*// " ABCDCBA" for(int i=0;i<5;i++){ System.out.print(" "); } for(int i=0;i<4;i++){ // System.out.print(‘A‘);//常数变异法,这里本应是变动的,先用常数代替 System.out.print((char)(‘A‘+i));//输出ABCDE,强制转换ASCII码 } for(int i=3-1;i>=0;i--){ System.out.print((char)(‘A‘+i)); } System.out.println(); // " ABCDEDCBA" for(int i=0;i<4;i++){ System.out.print(" "); } for(int i=0;i<5;i++){ // System.out.print(‘A‘);//常数变异法,这里本应是变动的,先用常数代替 System.out.print((char)(‘A‘+i));//输出ABCDE,强制转换ASCII码 } for(int i=4-1;i>=0;i--){ System.out.print((char)(‘A‘+i)); } System.out.println();*/ //k //? 9-k //?? k //??? k-2 for(int k=1;k<5;k++){ for(int i=0;i<9-k;i++){ System.out.print(" "); } for(int i=0;i<k;i++){ System.out.print((char)(‘A‘+i));//输出ABCDE,强制转换ASCII码 } for(int i=k-2;i>=0;i--){ System.out.print((char)(‘A‘+i)); } System.out.println(); } } }
A ABA ABCBA ABCDCBA
当变成逐渐熟练之后,常数变异法可能是我们最常用的方法。
试打印出如下图形:
$$ $$
$$ $$
$$ $$
$$ $$
$$ $$
$$$$
$$
$$$$
$$ $$
$$ $$
$$ $$
$$ $$
$$ $$
注意规模可以调整
/* * 打印图形 试打印出如下图形: $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$$$ $$ $$$$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ 注意规模可以调整 */ package ConstantChange; public class PrintX { public static void main(String[] args) { /*//" $$ $$ " for(int i=0;i<1;i++) System.out.print(" "); for(int i=0;i<2;i++) System.out.print("$"); for(int i=0;i<10;i++) System.out.print(" "); for(int i=0;i<2;i++) System.out.print("$"); for(int i=0;i<1;i++) System.out.print(" "); System.out.println(); //" $$ $$ " for(int i=0;i<2;i++) System.out.print(" "); for(int i=0;i<2;i++) System.out.print("$"); for(int i=0;i<8;i++) System.out.print(" "); for(int i=0;i<2;i++) System.out.print("$"); for(int i=0;i<2;i++) System.out.print(" "); System.out.println();*/ int LINE = 13;//由于图形的对称性,输入偶数行时,做出的图形+1行 int n = LINE/2; for(int k=0;k<n;k++){ for(int i=0;i<k+1;i++) System.out.print(" "); System.out.print("$$"); for(int i=0;i<LINE-3-2*k;i++) System.out.print(" "); System.out.print("$$"); for(int i=0;i<k+1;i++) System.out.print(" "); System.out.println(); } for(int i=0;i<n+1;i++) System.out.print(" "); System.out.print("$$"); for(int i=0;i<n+1;i++) System.out.print(" "); System.out.println(); for(int k=n-1;k>=0;k--){ for(int i=0;i<k+1;i++) System.out.print(" "); System.out.print("$$"); for(int i=0;i<LINE-3-2*k;i++) System.out.print(" "); System.out.print("$$"); for(int i=0;i<k+1;i++) System.out.print(" "); System.out.println(); } } }
$$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$$$ $$ $$$$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$
原文:http://blog.csdn.net/u011925500/article/details/24257965