打印倒三角形:1外for循环内for循环,2外for循环内while循环,3外while循环内for循环,4外while循环内while循环

问题遇到的现象和发生背景
遇到的现象和发生背景,请写出第一个错误信息
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
运行结果及详细报错内容
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

先看效果图:

img

参考如下:


/**
 * @author huazie
 * @version 2.0.0
 * @since 2.0.0
 */
public class Demo {

    public static void main(String[] args) {
        print1(5, '*');
        print2(5, '#');
        print3(5, '@');
        print4(5, '$');
    }

    static void print1(int height, char ch) {
        int n = height;
        for (int i = height; i > 0; i--) { // 控制高度
            for (int j = 1; j <= height - n; j++) {
                System.out.print(" "); // 输出每一行最前面的空格
            }
            n--;

            for (int k = 1; k <= i; k++) // 打印每一行的字符ch和空格后的东西
            {
                System.out.print(ch + " ");
            }

            System.out.println(); // 打印下一行
        }
    }

    static void print2(int height, char ch) {
        int n = height;
        for (int i = height; i > 0; i--) { // 控制高度
            int j = 1;
            while (j++ <= height - n) {
                System.out.print(" "); // 输出每一行最前面的空格
            }
            n--;

            int k = 1;
            while (k++ <= i) {
                System.out.print(ch + " "); // // 打印每一行的字符ch和空格后的东西
            }

            System.out.println(); // 打印下一行
        }
    }

    static void print3(int height, char ch) {
        int n = height;
        int i = height;
        while (i > 0) { // 控制高度
            for (int j = 1; j <= height - n; j++) {
                System.out.print(" "); // 输出每一行最前面的空格
            }
            n--;

            for (int k = 1; k <= i; k++) // 打印每一行的字符ch和空格后的东西
            {
                System.out.print(ch + " ");
            }

            System.out.println(); // 打印下一行
            i--;
        }
    }

    static void print4(int height, char ch) {
        int n = height;
        int i = height;
        while (i > 0) { // 控制高度
            int j = 1;
            while (j++ <= height - n) {
                System.out.print(" "); // 输出每一行最前面的空格
            }
            n--;

            int k = 1;
            while (k++ <= i) {
                System.out.print(ch + " "); // // 打印每一行的字符ch和空格后的东西
            }

            System.out.println(); // 打印下一行
            i--;
        }
    }
}

我想这个问题应该是你在刷oj的时候遇到的吧!如果您真是以为初学者。作为初学者,这个问题但是也困扰了我很久。不过到后来仔细一想,也并不是很难!
首先我不确定您是否想打印的是下面那种情况:

Case1Case2Case3

img

img

img

那么,我接下来将所有的题解都写一下吧!

Case1:

这个就可以参考九九乘法表的打印方式,观察行数,行递增,列递减。于是得到两个循环嵌套:

void triangle(int n){            //n是要打印的行数
    int i,j;
    for(i=0;i<n;i++){
        for(j=n-i;j>0;j--){
            putchar('*');        //这个是打印的字符,你也可以使用函数输入的方式自定义
        }
        putchar('\n');
    }
}
//这里一定要注意用单引号,因为双引号会识别为字符串,虽然有些编译器直接忽略这细小的差别,但是建议规范coding

写while和for可以互换,具体转换如下

forwhile

img

img

建议您动手尝试一下,这样才能有深刻的理解。

Case2

这个和第一个有几分相似,只是左右方向调换了,中间用空格开实现就行

void triangle(int n){            //n是要打印的行数
    int i,j;
    for(i=0;i<n;i++){
        for(j=i;j>0;j--){        //打印空格,使其右对齐
            putchar('');
        }
        for(j=n-i;j>0;j--){
            putchar('*');        //这个是打印的字符,你也可以使用函数输入的方式自定义
        }
        putchar('\n');
    }
}

Case3

这个相对来说就有一点难度了,因为这是两边都在变。不过回想一下,我们吧每个字符间隔加一,然后左边空格递增不就行了吗?

void triangle(int n){            //n是要打印的行数
    int i,j;
    for(i=0;i<n;i++){
        for(j=i;j>0;j--){
            putchar(' ');        //打印空格,使其对齐,这是左间距
        }
        for(j=n-i;j>0;j--){
            putchar('*');
            putchar(' ');        //字符间距
        }
        putchar('\n');
    }
}

这样效果出来了,可是如果您的oj系统上有要求,不能有多余的空格,那么就在第二个for循环的putchar(‘ ’);外面包裹上一个if

如下:

void triangle(int n){            //n是要打印的行数
    int i,j;
    for(i=0;i<n;i++){
        for(j=i;j>0;j--){
            putchar(' ');        //打印空格,使其对齐,这是左间距
        }
        for(j=n-i;j>0;j--){
            putchar('*');
            if(j>1)putchar(' ');//if语句让最后一个字符右边无空格
        }
        putchar('\n');
    }
}

希望我的回答能给您带来帮助,同时提前祝您2023新年快乐!

1、外for循环内for循环:

int size = 5;

for (int i = size; i > 0; i--) {
    for (int j = 0; j < i; j++) {
        System.out.print("*");
    }
    System.out.println();
}

2、外for循环内while循环:

int size = 5;

for (int i = size; i > 0; i--) {
    int j = 0;
    while (j < i) {
        System.out.print("*");
        j++;
    }
    System.out.println();
}

3、外while循环内for循环:

int size = 5;
int i = size;

while (i > 0) {
    for (int j = 0; j < i; j++) {
        System.out.print("*");
    }
    System.out.println();
    i--;
}

4、外while循环内while循环:

int size = 5;
int i = size;

while (i > 0) {
    int j = 0;
    while (j < i) {
        System.out.print("*");
        j++;
    }
    System.out.println();
    i--;
}

img


import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc =new Scanner(System.in);
        
        System.out.println("");    
        int side_length;
        
        System.out.print("请输入边长:");
         side_length= sc.nextInt();
        //打印倒等边三角形
        for(int i = side_length;i >=1 ;i--){
            
            for(int k =side_length-i;k >= 1;k--){
                    
                    System.out.print(" ");
                }
            for(int j = i;j >= 1;j--){
                    
                
                System.out.print("*" + " ");
            }
            
            System.out.println();
        }
        
        System.out.println("");    
    }
}

for循环内for循环
public class Main {
    public static void main(String[] args) {
        int n = 5;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n - i - 1; j++) {
                System.out.print(" ");
            }
            for (int j = 0; j < i * 2 + 1; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
运行结果:

    *
   ***
  *****
 *******
*********
外for循环内while循环
public class Main {
    public static void main(String[] args) {
        int n = 5;
        for (int i = 0; i < n; i++) {
            int j = 0;
            while (j < n - i - 1) {
                System.out.print(" ");
                j++;
            }
            j = 0;
            while (j < i * 2 + 1) {
                System.out.print("*");
                j++;
            }
            System.out.println();
        }
    }
}
运行结果:

    *
   ***
  *****
 *******
*********
外while循环内for循环
public class Main {
    public static void main(String[] args) {
        int n = 5;
        int i = 0;
        while (i < n) {
            for (int j = 0; j < n - i - 1; j++) {
                System.out.print(" ");
            }
            for (int j = 0; j < i * 2 + 1; j++) {
                System.out.print("*");
            }
            System.out.println();
            i++;
        }
    }
}
运行结果:

    *
   ***
  *****
 *******
*********
外while循环内while循环
public class Main {
    public static void main(String[] args) {
        int n = 5;
        int i = 0;
        while (i < n) {
            int j = 0;
            while (j < n - i - 1) {
                System.out.print(" ");
                j++;
            }
            j = 0;
            while (j < i * 2 + 1) {
                System.out.print("*");
                j++;
            }
            System.out.println();
            i++;
        }
    }
}
运行结果:

    *
   ***
  *****
 *******

以下是使用不同类型的循环打印倒三角形的四种方法:

使用外层 for 循环和内层 for 循环

# 定义倒三角形的高度
height = 5

# 外层 for 循环控制行数
for i in range(height):
    # 内层 for 循环控制每行的列数
    for j in range(height - i - 1):
        print(" ", end="")
    # 内层 for 循环控制每行的列数
    for j in range(i + 1):
        print("*", end="")
    # 换行
    print()


使用外层 for 循环和内层 while 循环

# 定义倒三角形的高度
height = 5

# 外层 for 循环控制行数
for i in range(height):
    # 内层 while 循环控制每行的列数
    j = 0
    while j < height - i - 1:
        print(" ", end="")
        j += 1
    # 内层 while 循环控制每行的列数
    j = 0
    while j < i + 1:
        print("*", end="")
        j += 1
    # 换行
    print()


使用外层 while 循环和内层 for 循环

# 定义倒三角形的高度
height = 5

# 外层 while 循环控制行数
i = 0
while i < height:
    # 内层 for 循环控制每行的列数
    for j in range(height - i - 1):
        print(" ", end="")
    # 内层 for 循环控制每行的列数
    for j in range(i + 1):
        print("*", end="")
    # 换行
    print()
    i += 1


使用外层 while 循环和内层 while 循环

# 定义倒三角形的高度
height = 5

# 外层 while 循环控制行数
i = 0
while i < height:
    # 内层 while 循环控制每行的列数
    j = 0
    while j < height - i - 1:
        print(" ", end="")
        j += 1
    # 内层 while 循环控制每行的列数
    j = 0
    while j < i + 1:
        print("*", end="")
        j += 1
    # 换行
    print()
    i += 1


这里假设倒三角形的高度为 5,输出结果如下:

    *
   **
  ***
 ****
*****



for i in range(5):
for j in range(5-i):
print("*", end=" ")
print()

for i in range(5):
j = 5-i
while j > 0:
print("*", end=" ")
j -= 1
print()
i = 5
while i > 0:
for j in range(i):
print("*", end=" ")
print()
i -= 1

i = 5
while i > 0:
j = i
while j > 0:
print("*", end=" ")
j -= 1
print()
i -= 1


public class Test05 {
    public static void main(String[] args) {
        // 在这里打印出正三角形
        for (int i = 1; i <= 10; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            System.out.print("\n");
        }
        System.out.println("——————————分界线——————————");
        // 在这里打印出倒三角形
        for (int i = 10; i >= 1; i--) {
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            System.out.print("\n");
        }
    }
}



可以使用以下四种方法之一来打印倒三角形:

1、使用两个 for 循环。外循环控制行数,内循环控制列数,并使用特定的列数来控制输出空格或星号。
2、使用一个 for 循环和一个 while 循环。外循环控制行数,内循环控制列数,并使用特定的列数来控制输出空格或星号。
3、使用一个 while 循环和一个 for 循环。外循环控制行数,内循环控制列数,并使用特定的列数来控制输出空格或星号。
4、使用两个 while 循环。外循环控制行数,内循环控制列数,并使用特定的列数来控制输出空格或星号。
下面是使用两个 for 循环的示例代码,可以根据需要使用其他方法:

public class Main {
    public static void main(String[] args) {
        int rows = 5;

        for (int i = rows; i >= 1; i--) {
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

输出:

*****
****
***
**
*