java利用循环输出*三角形

本文详细介绍了如何使用循环在控制台输出五行五列的星号阵列,以及通过循环构造不同形状的三角形,包括空格和*的递增/递减规律。通过解决复杂图形的分步构建,展示了寻找和利用编程规律解决问题的能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.在控制台输出五行五列*:

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

可以使用循环来做,首先外层循环变量控制行数,这里是五行所以循环条件为i<=5,内层循环变量控制每一行的列数,内层的for循环的作用是在1行输出5个*最后得到的运行结果就是上图所示的结果

2.输出三角形

 首先还是写一个for循环,行数为3,所以可以确定i的循环条件是i<=3,但是列数的取值范围不确定,这里就要找找规律,可以发现第一行1个,第二行3个,第三行5个所以可以总结出规律,      列数=行数*2-1;所以列数j可从1开始,循环条件为j<=2*i-1,这样得到的三角形是这样的:

 与想要的到的三角形有很大的出入,对比一下两个三角形,目标图形与目前得到的图形之间的差别就是在每一行前面添加空格。所以可以在输出*的循环的前面在加一个for循环,这个循环用来添加空格。这也需要找到行数与空格列数的关系。不难发现每一行前面的空格是逐步递减1的所以是-i,根据其他的条件不难发现:空格数=3-行数。所以最终可以列出这样的代码:

        int k;
		int l;
		for(k=1;k<=3;k++){
			for(int h=1;h<=3-k;h++){
				System.out.print("  ");
			}
			for(l=1;l<=2*k-1;l++){
				System.out.print("* ");
			}
			System.out.println();

2.

这个图形可以分为两部分来做 

 首先是上半部分,上半部分是6行,所以行数的循环条件是行数<=6,再看列,每行增加的列数为2,所以与行之间的关系就是2k+?,把2k带入不难发现?结果是4,所以行数与列数的关系就是

列字符数=行*2+4,接下来是空格的数目,每一行的空格数目都是递减的,每次减1,所以是-k,最后一行没有空格,也就是说空格数为0,所以之间的关系是每列空格数=6-行数。把条件放进去是完全符合的这样上半部分就做出来了。然后是下半部分的图形。下半部分是上半部分倒过来的,并且行数减少了1行,所以可以把行数的初始值设置为5,迭代设置为k--,循环条件是k>=1。而下半部分列里面的*是在递减的,而行数的变量也是在递减的,于是可以使用上半部分同样的方式,空格的方式也是与上半部分一样的,所以可以写出如下代码:

        int k;
		int l;
		//行
		for(k=1;k<=6;k++){
			for(int p=1;p<=6-k;p++){
				System.out.print(" ");
			}
			for(l=1;l<=2*k+4;l++){
				System.out.print("*");
			}
			System.out.println();
		}
		for(k=5;k>=1;k--){
			for(int p=1;p<=6-k;p++){
				System.out.print(" ");
			}
			for(l=1;l<=2*k+4;l++){
				System.out.print("*");
			}
			System.out.println();
		}

最后得出的结果为

 3.

 这个图形一样可以分为两块来做。其中两部分又要分为两部分来做

 

先是上半部分,行数为9行,每行只输出一个所以列数的循环条件为b<=1,就是只让它输出一次。然后是空格与行数的关系,这里也不难发现  空格数=9-行数。

接下来是右边的一部分,右边的一部分与左边的一部分是在一个循环里面的,但是会多输出一个*(a==1)的时候,可以使用一个if语句来将它取代掉:

                if(a==1){
                    System.out.print("");
                }

这里比较难找的是空格的关系,而这个时候右侧的空格开始的部分就不再是从最左边开始了,而是左边的图形了,所以就可以找一下规律,第2行离左侧的空格数为1,第2行离左侧的空格数为3,第3行离左侧的空格数为5……。运用高中的知识也能知道关系为每列的空格数=行数*2-3。这样上半部分就解决了。

下半部分可以用上面一题一样的方法,行数的初始值从8开始,循环条件是行数>=1,迭代是i--,其他的地方都不用改动,所以代码为;

        int a;
		int b;
		for(a=1;a<=9;a++){
			for(int c=1;c<=9-a;c++){
				System.out.print(" ");
			}
			for(b=1;b<=1;b++){
			System.out.print("*");
			}
			for(int e=1;e<=2*a-3;e++){
				System.out.print(" ");
			}
			for(int d=1;d<=1;d++){
				if(a==1){
					System.out.print("");
				}else{
				System.out.print("*");
				}
			}
			System.out.println();
		}
		for(a=8;a>=1;a--){
			for(int c=1;c<=9-a;c++){
				System.out.print(" ");
			}
			for(b=1;b<=1;b++){
			System.out.print("*");
			}
			for(int e=1;e<=2*a-3;e++){
				System.out.print(" ");
			}
			for(int d=1;d<=1;d++){
				if(a==1){
					System.out.print("");
				}else{
				System.out.print("*");
				}
			}
			System.out.println();
		}

运行结果:

 4.

 这个图形,我使用的是别的方法。在上一题中,可以知道输出的东西是可以使用空格来取代的,于是整活开始。

首先我是直接把这样的一个图形全部输出出来

 也就是直接整一个8*15的长方形,然后使用空格取代中间的*,即在这个区间内的*全部使用空格来代替,现在就是找规律,先找左边这条边的规律,可以看到它左边的空格是在依次递减的,每次减1,所以是?-行数,最后一行剩了一个,所以应该是9-i;即if选择结构中的一个条件是j>9-i。也就是在9-i右边的*全部使用空格替代。

接下来是右边这条线,可以看出是在递增的,每次加1;先预定一个+i,现在不能看最后一行了,我们需要的是一个确定的数字,所以看第一行,中间这个三角形的顶点处,发现它在第八个,所以可以得出第二个条件j<i+7.这样就可以写出代码:

    public static void main(String[] args) {
		for(int i=1;i<=8;i++){
			for(int j=1;j<=15;j++){
				if(j>9-i&&j<7+i){
					System.out.print(" ");
				}else{
				System.out.print("*");
				}
			}
			System.out.println();
		}
    }

 运行结果

总结:要学会找规律,外层控制行数,内层控制列数!

和我一起学习的还有很多同学,其中很多很多人都比我优秀,我之前做了一个题目,用循环将十进制数改写为二进制,八进制数,十六进制数。我一开始使用的是累加的方法,才能实现将数据到过来输出,做法很繁杂。后来我在网上看到了一个大神,用的数组的方法,结构清晰,方法也很巧妙。后来我发现居然是我们班的同学,我想着哪来的大佬跑这里来炸鱼塘,不过我自身还需要努力训练自己的思维,争取能像我们班那些学的好的同学靠齐。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放在糖果旁的是我很想回忆的甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值