java学习笔记:for循环题目(根据java5的练习)

1:求 1 到 n 的阶乘(n!)

2:打印一个 5 行 5 列的星号方块

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

3:打印一个右下角三角形

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

1:求 1 到 n 的阶乘(n!)

首先我们得知道什么叫做阶乘,举一个例子2!=2\times1,4!=4\times3\times2\times1,阶乘的算法是从自己开始,一路乘到1结束。

那么这个是一个标准的循环结构,这个的思路与5.java学习笔记:for循环-CSDN博客5.java学习笔记:for循环-CSDN博客5.java学习笔记:for循环-CSDN博客中求和的思路一样,先确定一个容器,然后容器里面没有东西,通过循环,把东西放进去

import java.util.Scanner;
public class we {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner input = new Scanner(System.in);
		System.out.println("请输入一个数字");
		int n = input.nextInt();
		int mul=1;
		for(int i = n; i>=1;i--) {
			mul*=i;
		}
		System.out.println(mul);
		
	}
}

首先进行用户交互,让用户来输入这个数值,然后用户输入的数值放在n这里。

并且建立了 mul这个容器(不能像sum是0,很正常,因为如果像sum一样,那么mul*任何数字都是0了,这个就不正确了)

那么进入了for循环


for(循环变量赋初值;循环条件;循环变量增值){
 
循环语句;
 
}

这个是for循环的格式,得按照一个一个来。

首先是循环变量初值,我这里不是1,因为阶乘的算法是 自己乘到1,那么所以初始的值是n(自己本身)然后循环条件只要大于等于1就行,1虽然不改变任何事情,但是在算法上中式存在的,不能忽略。最后式增值(或者减)这里就是减。

所以整个逻辑(如果n是5的话)

mul(旧的)=1

在第一次循环中,5>=1,所以可以进入循环

mul(旧的)*5 = mul(新的=5)

然后5完成后,需要减去1,所以i=5-1=4.

mul(上次新的=5)*4 = mul(这一轮新的=5*4=20)

………………

完成2的时候,需要减去1,所以i=2-1

mul(上一轮新得出的=120)*1 = mul(这一轮新的 = 120*1=120)

完成1后,需要减去1,所以i=1-1=0,不符合我的循环条件(i>=1,0<1,所以不能继续)

循环结束,然后打印出来mul就行,答案就是120.

同样,如果是6,7,8…………还是什么都是一样的思路。

可以看一看,这个程序是不是这个输出值

2:打印一个 5 行 5 列的星号方块

这个5行,5列的星号方块,那么有一个列,有一个行要去循环,所以就想到了for循环,5.java学习笔记:for循环-CSDN博客这个中9 9乘法表就是有两个循环,便使用了for循环嵌套。

那么有两个参数,分别是 i,j两个参数,因为要5*5的方块,所以我两个参数都要到5才能停止循环。根据在5中写的,for循环的结构,写一下就行

for (初始化表达式1; 循环条件1; 迭代表达式1) {
    for (初始化表达式2; 循环条件2; 迭代表达式2) {
        // 内层循环体
    }
    // 外层循环体
}

那么基本的代码就可以写出来了。

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

那么这个就是刚刚说的,那么我们尝试一下 是不是我们想要的。

和我们想想的差很多,我们想要一个方格,不是这个一行。

这里的逻辑是i=1的时候j有1,2,3,4这四个选择,同样i=2的时候,j也有1,2,3,4这四个选择,一直推下去,当i=4的时候,j有1,2,3,4这四个选择,但是我们不想要这个一条直线,而是想要方格,所以当i=1,j循环完之后,便是第一行,接着i=2的时候j=1,2,3,4是第二行,以此类推。

所以需要在外循环代码块中,让其换行的命令。


public class we {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for (int i = 0; i < 5; i++) {
		    for (int j = 0; j < 5; j++) {
		        System.out.print("*");
		    }
		    System.out.println();
		}
		
	}
}

那么这个代码,就是换好行之后的代码,输出值可以看一下

3:打印一个右下角三角形

这个是第二题的进阶版,这个很想一开始9 9 乘法表全部都写的时候。

这个一样,非常慢的一个方格,但是我们并不希望这样,我们需要的是一个三角形

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

那么我们来寻找规律,第一行就一个,第二行两个(有没有发现这个和行数有着非常紧密的关系)

同样这里需要使用for循环的嵌套。

那么我的列数一定要与行数一样


public class we {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for (int i = 0; i < 5; i++) {
		    for (int j = 0; j < i; j++) {
		        System.out.print("*");
		    }
		    System.out.println();
		}
		
	}
}

那么这个是我通过观察分析得到的代码,可以看看输出值,是不是和我想象的一样呢

非常抱歉,并不是,那不要气馁,继续分析,观察得到,这个空了一行,并且只有四行,那么很简单0,1,2,3,4本来是这样五个。所以成为了第0行0个,第一行1个 第二行2个,第三行3个,第四行4个,这样的输出。

但是因为列的数字与行一样,第0行是0个所以成为了这5行,所以需要改一下参数。

public class we {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for (int i = 1; i <= 5; i++) {
		    for (int j = 1; j <= i; j++) {
		        System.out.print("*");
		    }
		    System.out.println();
		}
		
	}
}

这个参数成为了 1,2,3,4,5这五行,所以列也是第一行一个,第二行两个,以此类推,那么这个输出值能不能符合我们想要的呢

这个对了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值