1.循环语句
特征:重复做某件事情,具有明确的开始和停止标志。
循环结构的组成:
①初始化语句:用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样。
②条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去。
③循环体语句:用于表示循环反复执行的内容,简单说就是循环反复执行的事情。
④条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去。
循环结构对应的语法:
①初始化语句:这里可以是一条或者多条语句,这些语句可以完成一些初始化操作。
②条件判断语句:这里使用一个结果值为boolean类型的表达式,这个表达式能决定是否执行循环体,例如:a < 3;
③循环体语句:这里可以是任意语句,这些语句将反复执行
④条件控制语句:这里通常是使用一条语句来改变 变量的值,从而达到控制循环是否继续向下执行的效果。常见i++,i--这样的操作。
1.2)for循环语句格式
格式:
for (初始化语句;条件判断语句;条件控制语句){
循环体语句;
}
执行流程:
①执行初始化语句
②执行条件判断语句,看其结果是true,还是false
如果是false,循环结束
如果是true,继续执行
③执行循环体语句
④执行条件控制语句
⑤回到②继续执行
/*
for 循环
*/
public class forDemo{
public static void main(String[] args){
//需求:在控制台输出5次”HelloWorld“
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("--------");
//用循环改进
for (int i = 1; i <= 5; i++){
System.out.println("HelloWorld");
}
}
}
DOS命令提示符窗口
C:\Users\Apple>d:
D:\>javac foeDemo.java
D:\>java foeDemo
HelloWorld
HelloWorld
HelloWorld
HelloWorld
HelloWorld
--------
HelloWorld
HelloWorld
HelloWorld
HelloWorld
HelloWorld
D:\>
1.3)案例:输出数据
需求:在控制台输出1-5和5-1的数据
分析:
①反复进行输出的动作,使用循环结构
for (初始化语句,条件判断据,条件控制语句){
循环体语句;
}
②从1开始到5结束,设置初始化从1开始
for (int i = 1;条件判断据,条件控制语句){
循环体语句;
}
③从1开始到5 结束,设置判断条件为没有到5的时候继续执行,执行到超过5程序结束
for (int i =1;i <= 5; 条件控制语句){
循环体语句;
}
④从1到5,每次增加1,设置条件控制每次+1
for (int i = 1; i <= 5; i++){
循环体语句
}
⑤将反复进行的事情写入循环结构内部,打印对应数据
for (int i = 1; i <= 5; i++){
System.our.ptintln(i);
}
/*
案例:
需求:在控制台输出1-5和5-1的数据
*/
public class forDemoTest{
public static void main(String[] args){
//for 循环语句 输出1-5
for (int i = 1; i <= 5; i++){
System.out.println(i);
}
System.out.println("--------");
//for 循环语句 输出5-1
for (int i = 5; i >= 1; i--){
System.out.println(i);
}
}
}
DOS命令提示符窗口
C:\Users\Apple>
D:\>javac forDemoTest.java
D:\>java forDemoTest
1
2
3
4
5
--------
5
4
3
2
1
D:\>
1.4)案例:求和
需求:求1-5之间的数据和,并把求和结果在控制台输出
分析:
①求和的最终结果必须保存起来,需要定义一个变量,用于保存求和的结果,初始值为0
int sum = 0;
②从1开始到5 结束的数据,使用循环结构完成
for (int i = 1; i <=5; i++){
sum += i;
}
System.out.println("sum+i");
/*
案例:求和
需求:求1-5之间的数据和,并把求和结果在控制台输出
*/
public class forDemoTest1{
public static void main(String[] args){
//for循环
int sum = 0;
for (int i = 1; i <= 5; i++){
sum += i;
/*
sum += 1; 等于 sum = sum + i;
第一次:sum = sum + i = 0 + 1 = 1;
第二次:sum = sum + i = 1 + 2 = 3;
第三次:sum = sum + i = 3 + 3 = 6;
第四次:sum = sum + i = 6 + 4 = 10;
第五次:sum = sum + i = 10 + 5 = 1;
*/
}
System.out.println("1-5之间的数据和是:" + sum);
}
}
DOS命令提示符窗口
C:\Users\Apple>
D:\>javac forDemoTest1.java
D:\>java forDemoTest1
1-5之间的数据和是:15
D:\>
1.5)案例:求偶书和
需求:求1-100之间的偶数和,并把求和结果在控制台输出
分析:
①对1-100的数据和与1-5的数据求和几乎完全一样,仅仅是结束条件不同
int sum = 0;
for (int i = 1; i <= 100; i++){
sum += i;
}
②对1-100的偶数求和,需对求和操作添加限制条件
int sum = 0 ;
for (int i = 1; i <= 100; i++){
if (执行的限制条件){
sum += i;
}
}
③限制条件是偶数才参与运算,因此条件应该是判断是否是偶数
int sum = 0;
for (int i = 1; i <= 100; i++){
if (1 % 2 == 0){
sum += i;
}
}
④当循环执行完毕时,将最终数据打印出来
System.out.println("1-100之间的偶数和是:" + sum);
/*
案例:求偶书和
需求:求1-100之间的偶数和,并把求和结果在控制台输出
分析:
①对1-100的数据和与1-5的数据求和几乎完全一样,仅仅是结束条件不同
②对1-100的偶数求和,需对求和操作添加限制条件
③限制条件是偶数才参与运算,因此条件应该是判断是否是偶数
④当循环执行完毕时,将最终数据打印出来
*/
public class forDemoTest2{
public static void main(String[] args){
//定义变量
int sum = 0;
for (int i = 1;i <= 100; i++){
if (i % 2 == 0){
sum += i;
}
}
System.out.println("1-100之间的偶数和是:" + sum);
}
}
DOS命令提示符窗口
C:\Users\Apple>d:
D:\>javac forDemoTest2.java
D:\>java forDemoTest2
1-100之间的偶数和是:2550
D:\>
1.6)案例:水仙花
需求:在控制台输出所有的“水仙花数”
什么是“水仙花数”?
①水仙花数是一个三位数
②水仙花数的各位、十位、百位的数字立方和等于原数
eg: 123 = 1 + 8 + 27 = 36 ≠ 123 不是水仙花数
371 = 27 + 343 +1 = 371 = 371 是水仙花数
分析:
①三位数的个位数字如何求
371 1就是原始数字对10进行取余运算的结果 371 % 10 = 1
②三位数的百位数字如何求
371 3就是原始数字除以100的结果(整数) 371 / 100 = 3
③三位数的十位数字如何求
371 371通过除以10,可以将7移动到各位上(整数) 371 / 10 = 37
37通过对10进行取余运算可以得到最后一位的值7 37 % 10 = 7
④思考:任意数字在指定位上的数值如何求?
先使用整数操作将要求的数字移动到个位上,在使用取余操作取出最后一位。
eg:123456789 ,取 5 的话,就先除以 10000 取整 得12345 ,然后再 除以10 取余得到 5
分析:
①输出所有的水仙花数必然要使用到循环,三位数范围:100 - 999
for (int i = 100; i <= 999; i++){
}
②不是每个三位数都是水仙花数,因此需要判定,满足条件的数字才能进行输出
if (执行的限制条件){
}
③判定条件的是将三位数中的每个数值取出来,计算立方和后与原始数字比较是否相等
if (? + ? + ? == 原数){
输出原数
}
④在计算之前获取三位数中每个位上的值
int a = 原数的个位;
int b = 原数的十位;
int c =原数的百位;
if (a * a * a + b * b * b + c * c * c == 原数)
综合分析:
①:先建立循环
②:取出三位数中个位、十位、百位数字
③计算是否满足条件,满足条件输出
/*
案例:水仙花数
需求:在控制台输出所有的“水仙花数”
什么是“水仙花数”?
①水仙花数是一个三位数
②水仙花数的各位、十位、百位的数字立方和等于原数
*/
public class forDemoTest3{
public static void main(String[] args){
/* (与下方for 表示是一样的)
for (int i = 100; 1 < 1000; i++){
}
*/
for (int i = 100; i <= 999; i++){
//再计算之前获取三位数中每个位上的值
int a = i%10;
int b = i/10%10;
int c = i/10/10%10;
//判定条件是将三位数中的每个数值取出来,计算立方和后,与原始数字比较是否相等;
if (a*a*a + b*b*b + c*c*c == i){
//输出满足条件的数字就是水仙花数
System.out.println(i);
}
}
}
}
DOS命令提示符窗口
C:\Users\Apple>d:
D:\>javac forDemoTest3.java
D:\>java forDemoTest3
153
370
371
407
D:\>
1.7)案例:统计
需求:统计“水仙花数”一共有多少个,并在控制太输出个数
分析:
①定义变量count,用于保存“水仙花数”的数量,初始值为0
int count = 0;
②在判定水仙花数的过程中,满足条件不再输出,更改为修改count的值
if (a*a*a + b*b*b + c*c*c == 原数){
}
③打印输出最终结果
System.out.println("水仙花数共有:" + count +"个");
/*
案例:统计水仙花数
需求:统计“水仙花数”一共有多少个,并在控制太输出个数
*/
public class forDemoTest4{
public static void main(String[] args){
//定义变量count,用于保存“水仙花“的数量,初始值为0
int count = 0;
//输出所有水仙花数必然要使用循环,遍历所有的三位数,三位数从100开始,到999结束
for (int i = 100; i < 1000; i++){
//在计算之前获得三位数中每个伪上的值
int a = i%10;
int b = i/10%10;
int c = i/10/10%10;
//在判定水仙花数的过程中,满足条件不在输出,更改为修改count的值,使count+1
if(a*a*a + b*b*b + c*c*c == i){
count++;
}
}
//打印输出最终结果
System.out.println("水仙花数有:" + count + "个");
}
}
DOS命令提示符窗口
C:\Users\Apple>d:
D:\>javac forDemoTest4.java
D:\>java forDemoTest4
水仙花数有:4个
D:\>