之前写代码是直接看到题目就打开软件然后边想边写,但是这样很容易出现思维卡顿,所以这里编写的菱形+数字会采用先盘逻辑后盘代码的顺序。
最后实现的效果图:
这个效果说难也不难,但说简单也不简单,最重要的是思维逻辑得跟上,下面来盘盘逻辑吧~~
逻辑步骤:
1、分区
给图片分区,大概分为上部分(橙色)和下部分(蓝色),并且各自再分为左边的数字(绿色)和右边的数字(粉色)
2、代码分为两个部分进行编写,上部分和下部分,先编写上部分中的for循环实现一个三角形的形状。
上部分需要考虑:行数、空格数、左边数字、右边数字
空格数是跟行数有关的,行数不同空格数也不同
左右边数字也跟行数有关,行数不同数字个数也不同
但是数字和空格数之间没有关系
所以:行数的for循环需要包裹空格数和左右边数字,左右边数字和空格数并列
3、上部分-找关系
第二步已经知道了四者之间的关联后就可以找出几者的关系了。
行数:从1开始到总行数5结束
空格数:
总行数:5 | 第1行空格数 | 4 |
第2行空格数 | 3 | |
第3行空格数 | 2 | |
第4行空格数 | 1 | |
第5行空格数 | 0 |
找到规律:空格数 是从( 总行数- 行数)开始到 >0 结束;
左边数字:
能直观的看到左边数字都是从1开始,所以for开头数字就是1
第1行 | 结束数字 | 1 |
第2行 | 结束数字 | 2 |
第3行 | 结束数字 | 3 |
找到规律: 从 1开始 到 <=行数 结束 (可以观看上面的图)
右边数字:
能直观的看到第一行右边是没有数字的,从第二行开始才有 ,且结束数字都是1
总行数:5 | 第1行开始数字 | 0 |
第2行开始数字 | 1 | |
第3行开始数字 | 2 | |
第4行开始数字 | 3 | |
第5行开始数字 | 4 |
找到规律:右边数字从 (行数-1)开始到 >0 结束
4、编写上部分的代码
// todo 上半部分
// TODO 行数
// line 为用户输入的总行数 ,i 为行数,k控制空格,j用于控制左边数字,a控制右边数字
for (int i = 1; i <= line; i++) {
// todo 空格
for (int k = line - i; k > 0; k--) {
System.out.print(" ");
}
// 左边数字
for (int j = 1; j <= i; j++) {
System.out.print(j);
}
// 右边数字
for (int a = i - 1; a > 0; a--) {
System.out.print(k);
}
System.out.println("");
}
5、下部分--找关系
下部分跟上部分一致,同样分为 行数、空格、左边数字、右边数字
行数:可以从图中看出行数是1-4,但是直接写4后会直接写死,我们需要找出总行数和行数的关系,这里是 从 1 开始到 <=(总行数-1)结束
空格数:
总行数:5 | 第1行空格数 | 1 |
第2行空格数 | 2 | |
第3行空格数 | 3 | |
第4行空格数 | 4 |
找到规律:空格数从 行数开始 到 >0 结束
左边数字:
通过观察能够看出左边数字都是从1开始的,接下来分析结束
总行数:5 | 第1行结束数字 | 4 |
第2行结束数字 | 3 | |
第3行结束数字 | 2 | |
第4行结束数字 | 1 |
找到规律:左边数字 从 1开始到 <=(总行数-行数)结束
右边数字:
通过观察可以看到右侧结束数字都是1
总行数:5 | 第1行开始数字 | 3 |
第2行开始数字 | 2 | |
第3行开始数字 | 1 | |
第4行开始数字 | 0 |
找到规律:右侧数字从 (总行数-行数-1)开始 到 >=1 结束
6、编写下部分的代码
// todo 下半部分
// TODO 行数
for (int i = 1; i < line ; i++) {
// todo 空格
for (int k = i; k > 0; k--) {
System.out.print(" ");
}
// 左边数字
for (int j = 1; j <= line - i; j++) {
System.out.print(j);
}
// 右边数字
for (int a = line - i-1; a >= 1; a--) {
System.out.print(a);
}
System.out.println("");
}
7、全部代码
import java.util.Scanner; public class test13 { // TODO 菱形+数字 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入行数"); int line = scanner.nextInt(); // todo 上半部分 // TODO 行数 for (int i = 1; i <= line; i++) { // todo 空格 for (int k = line - i; k > 0; k--) { System.out.print(" "); } // 左边数字 for (int j = 1; j <= i; j++) { System.out.print(j); } // 右边数字 for (int j = i - 1; j > 0; j--) { System.out.print(j); } System.out.println(""); } // todo 下半部分 // TODO 行数 for (int i = 1; i < line ; i++) { // todo 空格 for (int k = i; k > 0; k--) { System.out.print(" "); } // 左边数字 for (int j = 1; j <= line - i; j++) { System.out.print(j); } // 右边数字 for (int j = line - i-1; j >= 1; j--) { System.out.print(j); } System.out.println(""); } } }