练习一:金字塔的一半
/*
第一次:i = 1 -> 执行内层 for 循环,j <= i : 1 <= 1,打印一个 *
第二次:i = 2 -> 执行内层 for 循环,j <= i : 1 <= 2,打印两个 *
第三次:i = 3 -> 执行内层 for 循环,j <= i : 1 <= 3,打印三个 *
第四次:i = 4 -> 执行内层 for 循环,j <= i : 1 <= 4,打印四个 *
第五次:i = 5 -> 执行内层 for 循环,j <= i : 1 <= 5,打印五个 *
*/
for(int i = 1; i <= 5;i++){
for(int j = 1; j <= i;j++){
System.out.print("*");
}
System.out.print("\n");
}
效果图:
练习二:完整金字塔(优化前)
for(int i = 1; i <= 5;i++){
// 空格
for(int k = 5; k > i;k--){
System.out.print(" ");
}
// 半个金字塔(左半)
for(int j = 1; j <= i;j++){
System.out.print("*");
}
// 半个金字塔(右半)
for(int l = 2; l <= i;l++){
System.out.print("*");
}
System.out.print("\n");
}
效果图:
练习二:完整金字塔(优化后)
这里我们可以找规律
* 第一行一个 *,四个空格
*** 第二行三个 *,三个空格
***** 第三行五个 *,两个空格
******* 第四行七个 *,一个空格
********* 第五行九个 *,没有空格
可以看出上述符合等差数列
等差数列公式:an = a1 + (n - 1)
看上面可以知道 a1 = 1,d = 2,将 a1 和 d 带入公式可以得出 an = 2n-1
下面我们用这个公式对程序进行优化
// i 表示层数
for(int i = 1; i <= 5;i++){
// 空格公式:总层数 - 当前层数
for(int j = 1; j <= 5 - i;j++){
System.out.print(" ");
}
// 金字塔
for(int k = 1;k <= 2 * i - 1;k++){
System.out.print("*");
}
System.out.print("\n");
}
练习三:空心金字塔(优化前)
for(int i = 1; i <= 5;i++){
// 空格
for(int k = 5; k > i;k--){
System.out.print(" ");
}
// 金字塔左边
System.out.print("*");
// 金字塔中间
for(int j = 2; j <= i;j++){
// if 是因为要判断是不是到达底部,用来封底
if( i == 5){
System.out.print("*");
} else {
System.out.print(" ");
}
}
for(int j = 3; j <= i;j++){
// if 是因为要判断是不是到达底部,用来封底
if( i == 5){
System.out.print("*");
} else {
System.out.print(" ");
}
}
// 金字塔右边
if(i != 1){
System.out.print("*");
}
System.out.print("\n");
}
效果图:
练习三:空心金字塔(优化后)
int t = 20;
for(int i = 1; i <= t;i++){
for(int j = 1; j <= t - i;j++){
System.out.print(" ");
}
for(int k = 1;k <= 2 * i - 1;k++){
if( k == 1 || k == 2 * i - 1 || i == t){
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.println();
}
效果图:
练习四:菱形(优化前)
// 菱形上
for(int i = 1; i <= 4;i++){
// 空格
for(int k = 1; k <= 4 - i;k++){
System.out.print(" ");
}
// *
for(int j = 1; j <= 2 * i - 1;j++ ){
System.out.print("*");
}
System.out.println();
}
// 菱形下
for(int i = 1; i <= 3;i++){
// 空格
for(int k = 1; k <= i;k++){
System.out.print(" ");
}
// *
for(int j = 1; j <= -2 * i + 7;j++ ){
System.out.print("*");
}
System.out.println();
}
效果图:
练习四:菱形(优化后)
int size = 4;
// 首先定义行数, +(反) 和 -(正)
for(int i = -size;i <= size;i++){
// 定义星号的个数
int stars = size - Math.abs(i);
// 打印空格,3、2、1、0、1、2、3
for(int j = 0; j < Math.abs(i);j++){
System.out.print(" ");
}
// 打印星号,1、3、5、7、9、7、5、3、1
for(int k = 0;k < stars * 2 - 1;k++){
System.out.print("*");
}
System.out.println();
}
效果图:
练习五:空心菱形
int size = 4;
// 首先定义行数, +(反) 和 -(正)
for(int i = -size;i <= size;i++){
// 定义星号的个数
int stars = size - Math.abs(i);
// 打印空格,3、2、1、0、1、2、3
for(int j = 0; j < Math.abs(i);j++){
System.out.print(" ");
}
// 打印星号,1、3、5、7、9、7、5、3、1
for(int k = 0;k < stars * 2 - 1;k++){
// (stars * 2 -1) -1 是本行的最后
if(k == 0 || k == (stars * 2 -1) -1 ){
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.println();
}
效果图: