java利用循环输出*三角形

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.java利用循环输出*三角形_第1张图片

这个图形可以分为两部分来做 java利用循环输出*三角形_第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();
		}

最后得出的结果为java利用循环输出*三角形_第3张图片

 3.java利用循环输出*三角形_第4张图片

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

java利用循环输出*三角形_第5张图片

 

先是上半部分,行数为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();
		}

运行结果:java利用循环输出*三角形_第6张图片

 4.java利用循环输出*三角形_第7张图片

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

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

java利用循环输出*三角形_第8张图片

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

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

    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();
		}
    }

 运行结果java利用循环输出*三角形_第10张图片

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

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

你可能感兴趣的:(java,开发语言,学习)