打印三角形
先将三角形分成四份,先打印第一部分的空格
带入变量进行思考
//1.先将三角形看作是正方形里的三角形,先打印出第一部分空白
for (int a = 1;a<=6 ;a++ ) {
for (int b =6;b>=a ;b-- ) {
System.out.print(" ");
}
//2.再打印正三角的一半
for (int j=1;j<=a ;j++ ) {
System.out.print("1");
}
//3.再打印另一半
for (int k=1;k<=a-1 ;k++ ) {//第二个半三角形要比第二个少输出一个不然不尖
System.out.print("1");
}
System.out.println();
}
打印空心三角形
1.先打印一个矩形
ooooo
ooooo
ooooo
ooooo
ooooo
for (int i=1;i<=5 ;i++ ) {
System.out.println("*****");
}
2.打印半个三角形
o-------第一层1个 1
oo------第一层2个 1
ooo-----第一层3个 1
oooo----第一层4个 1
ooooo --第一层5个 1
把 i 当成层数,增加一个循环控制每层打印多少个
for (int i=1;i<=5 ;i++ ) {
for (int j =1;j<=i ;j++ ) {//因为刚好是那一层就打印几个所以,直接使用i作为判断条件
System.out.print("*");//不换行
}
System.out.println("");//换行
}
3.打印整个三角形
wwwwo----第一层1个* ----刚好是2x层数-1–2x1-1----空格数量是(总层数-当前层数)个空格
wwwooo—第二层3个*----刚好是2x层数-1–2x1-1----空格数量是(总层数-当前层数)个空格
wwooooo–第三层5个* ----刚好是2x层数-1–2x1-1----空格数量是(总层数-当前层数)个空格
wooooooo-第四层6个*----刚好是2x层数-1–2x1-1----空格数量是(总层数-当前层数)个空格
ooooooooo第五层9个*----刚好是2x层数-1–2x1-1----空格数量是(总层数-当前层数)个空格
for (int i=1;i<=5 ;i++ ) {
for (int k=1;k<=5-i ;k++ ) {
System.out.print(" ");//打印空格
}
for (int j =1;j<=2*i-1 ;j++ ) {//因为刚好是那一层就打印几个所以,直接使用i作为判断条件
System.out.print("*");//不换行
}
System.out.println("");//换行
}
4.打印空心三角形
wwwwo----第一层1个* 第一个和最后一个才输出
wwwoso----第二层2个第一个和最后一个才输出
wwossso----第三层2个第一个和最后一个才输出
wosssssso----第四层2个第一个和最后一个才输出
ooooooooo----第五层9个第五层全输出
for (int i=1;i<=5 ;i++ ) {
for (int k=1;k<=5-i ;k++ ) {
System.out.print(" ");//空格
}
for (int j =1;j<=2*i-1 ;j++ ) {//因为刚好是那一层就打印几个所以,直接使用i作为判断条件
if (j==1||j==2*i-1||i==5) {//j=1表示当前在第一个位置,=2*i-1表示在最后一个位置(注意=等于就是最后一次内循环),i==5表示在最后一层
System.out.print("*");//不换行
}else{
System.out.print(" ");
}
}
System.out.println("");//换行
}
输出效果
5.灵活性
将层数使用一个变量表示,就可以随意输出其他大小的三角
int lever = 5;
for (int i=1;i<=lever ;i++ ) {
for (int k=1;k<=lever-i ;k++ ) {
System.out.print(" ");//空格
}
for (int j =1;j<=2*i-1 ;j++ ) {//因为刚好是那一层就打印几个所以,直接使用i作为判断条件
if (j==1||j==2*i-1||i==lever) {//j=1表示当前在第一个位置,=2*i-1表示在最后一个位置(注意=等于就是最后一次内循环),i==5表示在最后一层
System.out.print("*");//不换行
}else{
System.out.print(" ");
}
}
System.out.println("");//换行
}
比如将层数变成20 效果如下:
练习:打印一个空心菱形
public class Stars{
public static void main(String[] args) {
//打印菱形空心三角
//(1)先打印出三角前的空白
int lay = 10;
for (int a= 1;a<=lay ;a++ ) {
for (int b=1;b<=lay-a;b++ ) {
System.out.print(" ");
}
//(2)再打印出三角形
for (int j=1;j<=2*a-1 ; j++) {
//(3)添加一个条件只有在第一个和最后一个时才打印*否则打印空白,上半部分就打印好了
if (j==1||j==2*a-1) {
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();//上半部分的 每输出玩一行就换行
}
//(4)再根据下半部分是*号前的空白是慢慢增加,*是慢慢变窄的情况打印下半部分
for (int c= 1;c<lay ;c++) {
for (int k = 1;k<=c ;k++ ) {//打印空白
System.out.print(" ");
}
//(5)再打印出倒空心三角
for (int p=1;p<=2*(lay-c)-1 ;p++) {
//(5再添加首尾才输出*号的条件,否则输出空白)
if (p==1||p==2*(lay-c)-1) {
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();//下半部分的 每输出玩一行就换行
}
}
}
效果图;
难点在于发现每行需要打印的星号与层数之间存在怎么样的关系