=====taoyyz小陶©版权所有=====
实验一 输出如下图形,行数通过键盘输入的数据确定
要求:
用死循环反复测试,即把绘制函数放入while()循环中
其实就是金字塔形,不过跟传统的那种输出*堆砌的金字塔不一样,这个奇数行是1,偶数行是2
思路:
个人分析:
第一行1个元素 共计1个字符
第二行2个元素+1个空格 共计3个字符
第二行3个元素+2个空格 共计5个字符
…
第n行n个元素+(n-1)个空格 共计n+(n-1)个字符,即2n-1个字符
对齐图形,只需要在第1行前面补(2n-1)/2个空格字符
第2行前面补(2n-1)/2-1个空格字符
第i行前面补(2n-1)/2-(i-1)个空格字符
为了输出效果跟老师的一模一样,注意数字之间也要有空格分隔。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| package com.experiment.exp1.DrawTriangle;
import java.util.Scanner;
public class DrawTriangle { public static void main(String[] args) {
while (true) { draw(); } }
public static void draw() { boolean isOddNum = true; System.out.print("请输入金字塔层数:"); int num = new Scanner(System.in).nextInt(); for (int i = 1; i <= num; i++) { for (int j = 0; j < (2 * num - 1) / 2 - (i - 1); j++) { System.out.print(" "); } if (isOddNum) { System.out.print(1); for (int printNum = 1; printNum < i; printNum++) { System.out.print(" " + 1); } isOddNum = false; } else { System.out.print(2); for (int printNum = 1; printNum < i; printNum++) { System.out.print(" " + 2); } isOddNum = true; } System.out.println(); } } }
|
有个精简版,这里只展示draw()方法:
1 2 3 4 5 6 7 8 9 10 11 12 13
| public static void draw() { System.out.print("请输入金字塔层数:"); int num = new Scanner(System.in).nextInt(); for (int i = 1; i <= num; i++) { for (int j = i; j < num; j++) { System.out.print(" "); } for (int j = 1; j <= i; j++) { System.out.print(i % 2 == 1 ? "1 " : "2 "); } System.out.println(); } }
|
运行截图:
心得:
这种输出金字塔、菱形、正方形(最简单)、矩形等等的题,考虑嵌套循环。这道题需要考虑奇数层/偶数层 输出的数字是不同的。顺带一提,在输出 数字+” “ 这种带空格的需要多次连接字符串,非常浪费性能,其实可以直接输出 “数字 “ 这样一个字符串就解决了。但是现在编译器一般会自动优化成第二种格式。
特别是对于菱形这种对称图形,在给定的” * “个数以内输出的话,可以先输出对称的其中一半,然后每次判断输出下一层还够不够。
💖💖💖这道题想做好就要动点脑子惹💖💖💖
感谢阅读💗