我是刚学会了简单的键盘录入,然后用上for的嵌套循环打印*号的空心菱形。
但是一个问题,输入7,打印的是7行。输入10,打印的是11行,搞不懂问题出现在哪里?
- /*需求:打印正金字塔
- *
- * *
- * *
- *-----*
- *---*
- *-*
- *
- 思路:
- 1,共4行
- 2,左边空白部分是一个倒三角形
- 3,每列的数量随着行数变化
- 步骤:
- 1,大圈套小圈,for外循环定义行数
- 2,内循环定义空白倒三角形(尖朝下,内循环初始化值随着外循环变化)
- 3,内循环定义列数(尖朝上,内循环条件随着外循环变化)
- 注意:
- 1,内循环里的输出打印语句的print,外循环的是println
- 2,注意步骤3的规律的变化
- */
- //导入包
- import java.util.Scanner;
- class rhomb
- {
- public static void main(String[] args)
- {
- System.out.println("请输入正整数数字:");
- //创建对象,system。in是标准输入流,录入键盘输入
- Scanner sc = new Scanner(System.in);
- //定义变量,获取录入的数据
- int c =sc.nextInt();
-
- for(int x=1;x<(c/2+2);x++) //外循环,条件判断循环4次
- {
- for(int z=x; z<(c/2+2); z++) //内循环定义空白倒三角形的
- {
- System.out.print(" ");
- }
-
- for(int y=1; y<=x*2; y++) //内循环打印输出列数的*
- {
- if(y==1|| y==(x*2-1) )
- {
- System.out.print("*");
- }
- else
- System.out.print(" ");
- }
-
- System.out.println(); //外循环的换行功能
- }
- //倒三角形a=3
- int m=c/2;
- for(int a=1; a<=m; a++)
- {
- for(int b=0 ;b<=a ;b++)
- {
- System.out.print(" ");
- }
- for(int n=((c/2)*2); n>(a*2-1); n--) //内循环打印输出列数的*
- {
- if(n==((c/2)*2) || n==(a*2))
- {
- System.out.print("*");
- }
- else
- System.out.print(" ");
- }
-
-
- System.out.println(); //外循环的换行功能
- } } }
复制代码 |
|