思路:
现将变动部分用常数代替,再逐步将常数替换为变数(变量)
关键是寻找变化的规律,如果不直观,可以列出所有变化,进行比对,然后设计公式
实例:
1.输出三角星号
首先找规律,发现每一行都是先输出空格,然后输出*号,空格、信号与行号的关系如下:
行号 空格数 星号数
1 4 1
2 3 2
3 2 3
4 1 4
5 0 5
代码:
public static void main(String[] args) {int rows = 5;for (int i = 1; i <= rows; ++i) {for (int j = 1; j <= rows - i; ++j) {System.out.print(" ");}for (int j = 1; j <= i; ++j) {System.out.print("* ");}System.out.println();}}
2.输出字母金字塔
经过观察,可以发现每一行的字符从左到右都是先增大再减小,最大的字符都是‘A’ + 行号-1(行号从1开始)
public static void main(String[] args) {{int rows = 5;char ch = 'A';for (int i = 1; i <= rows; ++i) {for (int j = 1; j <= rows - i; ++j) {System.out.print(' ');}for (int j = 0; j <= i - 1; ++j) {System.out.print((char) (ch + j)); // 将ASCII码转换为字符 }for (int j = i - 2; j >= 0; --j) {System.out.print((char) (ch + j));}System.out.println();}}
当编程逐渐熟练之后,常数变异法可能是我们最常用的方法。
3.输出以下图形
代码:


public static void main(String[] args) {{int rows = 13;if (rows % 2 == 0) //由于图形对称,处理偶数行,使其变为奇数行rows += 1;for (int i = 1; i<= rows/2; ++i){for(int j = 0; j < i; ++j)System.out.print(' ');System.out.print("$$");for(int j = 0; j < rows /2 -i; ++j)System.out.print(" ");System.out.print("$$");System.out.println();}for(int i = 1; i <= rows/2+1; ++i)System.out.print(' ');System.out.println("$$");for (int i = 1; i<= rows/2; ++i){for(int j = 0; j < rows/2+1 -i; ++j)System.out.print(' ');System.out.print("$$");for(int j = 0; j < i - 1; ++j)System.out.print(" ");System.out.print("$$");System.out.println();}}