先看效果图:
参考如下:
/**
* @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的时候遇到的吧!如果您真是以为初学者。作为初学者,这个问题但是也困扰了我很久。不过到后来仔细一想,也并不是很难!
首先我不确定您是否想打印的是下面那种情况:
Case1 | Case2 | Case3 |
---|---|---|
那么,我接下来将所有的题解都写一下吧!
这个就可以参考九九乘法表的打印方式,观察行数,行递增,列递减。于是得到两个循环嵌套:
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可以互换,具体转换如下
for | while |
---|---|
建议您动手尝试一下,这样才能有深刻的理解。
这个和第一个有几分相似,只是左右方向调换了,中间用空格开实现就行
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');
}
}
这个相对来说就有一点难度了,因为这是两边都在变。不过回想一下,我们吧每个字符间隔加一,然后左边空格递增不就行了吗?
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--;
}
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();
}
}
}
输出:
*****
****
***
**
*