1:求 1 到 n 的阶乘(n!)
2:打印一个 5 行 5 列的星号方块
*****
*****
*****
*****
*****
3:打印一个右下角三角形
*
**
***
****
*****
1:求 1 到 n 的阶乘(n!)
首先我们得知道什么叫做阶乘,举一个例子,
,阶乘的算法是从自己开始,一路乘到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这五行,所以列也是第一行一个,第二行两个,以此类推,那么这个输出值能不能符合我们想要的呢
这个对了。