700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Java使用多重for循环打印实心三角形 倒立三角形以及空心菱形

Java使用多重for循环打印实心三角形 倒立三角形以及空心菱形

时间:2023-05-03 15:12:35

相关推荐

Java使用多重for循环打印实心三角形 倒立三角形以及空心菱形

Java使用多重for循环打印实心三角形,倒立三角形以及空心菱形

使用双重for循环打印倒立三角形和菱形算是在循环嵌套里面,自我感觉比较难的第一个程序

这是本次要打印的目标:

打印上图实心三角形思路如下:1. 先打印左边的空格2. 再打印空格后边的符号*3. 规律:第一行有一个*第二行有三个*第三行有五个*...每一行都有2 * i - 1 个*故打印*号时,可以选择 <= 2 * i -1 或者 < 2 * i

// 代码实现如下 Java/***1. 通过Scanner从键盘获取用户自定义输入的三角型行数*2. 再通过循环先打印出空格*3. 最后打印出符号**/Scanner myScanner = new Scanner(System.in);int line = myScanner.nextInt(); // 获取用户输入的列数for (int i = 1; i <= line ; i++) {// 先打印空格for (int k = 0; k < line - i; k++) {System.out.print(" "); //这里需要注意:println是自带换行的,故要换成print取消自动换行}// 再打印符号*for (int j = 1; j < 2 * i; j++) {System.out.print("*");}// 最后在打印完一行之后,就换行 println()自带换行功能System.out.println();}

结果如下:

打印进阶:打印出空心三角形

进阶目标:

思路和打印实心三角形一样,只不过将打印三角形内部的符号*换成空格

// 代码实现和上述相同,只是在打印内部符号的时候添加判断,判断打印的是否为三角形的两边以及底部,代码如下 Java:/***1. 通过Scanner从键盘获取用户自定义输入的三角型行数*2. 再通过循环先打印出空格*3. 最后打印出符号**因为三角形左右两边的符号是对称的,需要 * 2来表示*参数说明:* j == 1 表示打印完空格后,三角形左边的边* j == 2 * i - 1 表示打印完内部空格后的最右边的边* i == line 表示打印最后一行,底部的全部符号*/Scanner myScanner = new Scanner(System.in);int line = myScanner.nextInt(); // 获取用户输入的列数for (int i = 1; i <= line ; i++) {// 先打印空格for (int k = 0; k < line - i; k++) {System.out.print(" "); //这里需要注意:println是自带换行的,故要换成print取消自动换行}// 再打印符号*for (int j = 1; j < 2 * i; j++) {if (j == 1 || j == 2 * i - 1 || i == line) {System.out.print("*");} else {System.out.print(" ");}}// 最后在打印完一行之后,就换行 println()自带换行功能System.out.println();}

结果如下:

打印倒立三角形

本次打印目标:

思路和打印空心三角形一样,只不过将打印三角形倒过来

// 代码实现和上述相同,只是在打印内部符号的时候添加判断,判断打印的是否为三角形的两边以及底部,代码如下 Java:/***1. 通过Scanner从键盘获取用户自定义输入的三角型行数*2. 再通过循环先打印出空格*3. 最后打印出符号**参数说明:* j == 1 表示打印完空格后,三角形左边的边* j == 2 * i - 1 表示打印完内部空格后的最右边的边* i == 1表示顶部需要全部打印的那行*/Scanner myScanner = new Scanner(System.in);int line = myScanner.nextInt(); // 获取用户输入的列数for (int i = 1; i <= line ; i++) {// 先打印空格,这里因为是打印倒立的三角形,故空格是递增的,因此用递增的i来代表空格数for (int k = 1; k < i; k++) {System.out.print(" "); //这里需要注意:println是自带换行的,故要换成print取消自动换行}// 再打印符号* 这里将原来的i替换成line - i,因为符号*是递减的,故要用总行数减去当前i值来表示递减的符号for (int j = 1; j < 2 * (line - i); j++) {if (j == 1 || j == 2 * (line - i) - 1 || i == 1) {// System.out.print("*");} else {System.out.print(" ");}}// 最后在打印完一行之后,就换行 println()自带换行功能System.out.println();}

结果如下:

再次进阶:打印空心菱形

本次打印的目标:

思路和打印空心三角形一样,只不过将打印一个空三角形增加到了打印一个正空三角和一个倒空三角

// 代码实现和上述相同,只是在打印内部符号的时候添加判断,判断打印的是否为三角形的两边以及底部,代码如下 Java:/***1. 通过Scanner从键盘获取用户自定义输入的三角型行数*2. 再通过循环先打印出空格*3. 最后打印出符号**参数说明:* j == 1 表示打印完空格后,三角形左边的边* j == 2 * i - 1 表示打印完内部空格后的最右边的边* i == line 表示打印最后一行,底部的全部符号*/Scanner myScanner = new Scanner(System.in);int line = myScanner.nextInt(); // 获取用户输入的列数for (int i = 1; i <= 2 * line ; i++) {// 由于打印的是两个空心三角形,故需要的行数是原来的两倍if (i <= line) {// line以前是上半部的空心三角形// 先打印空格for (int k = 0; k < line - i; k++) {System.out.print(" "); //这里需要注意:println是自带换行的,故要换成print取消自动换行}// 再打印符号*for (int j = 1; j < 2 * i; j++) {if (j == 1 || j == 2 * i - 1) {// 由于菱形中间是镂空的,所有中间那行全符号*就不用打印了System.out.print("*");} else {System.out.print(" ");}}} else {/*** 以下为打印下半部分的空心三角形* 打印空格的顺序也由原来的空格数递减变成了空格数递增* 由于此时的i已经不是从1开始,但我们可以通过 i-lne 来表示从1开始来打印递增的空格*/// 先打印空格 i - line 递增打印倒立三角形空格for (int k = 0; k < i - line; k++) {System.out.print(" "); //这里需要注意:println是自带换行的,故要换成print取消自动换行}// 再打印符号* 原来的i变成了如今的总行数减去ifor (int j = 1; j < 2 * (2 * line - i); j++) {if (j == 1 || j == 2 *(2 * line - i - 1) {// if语句判断打印的是否为三角形的内部System.out.print("*");} else {System.out.print(" ");}}}// 最后在打印完一行之后,就换行 println()自带换行功能System.out.println();}

结果如下:

总结思路:

1. 第一次遇到这个问题时,难免会不知所措,这时候可以采用化繁为简的方法

先找到各行之间的规律,然后试着做出部分来,接着再补充其他,最后就是优化了

2. 也可以采用先死后活的方法

就拿需要打印的空心三角形来说,可以先打印出实心三角形,然后只需要判断打印的是不是三角形的边界,如果是就打印,不是就打印空格

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。