Java的for循环
目录
什么是循环语句
循环语句就是让计算机根据条件做循环计算,在条件满足时继续循环,条件不满足时退出循环。
程序是为了解决实际问题的,实际问题中存在着重复动作,那么程序中也应该有相应的描述,这就是循环。
软件中有许多重复的动作:
(1)音乐软件循环播放某一首歌
(2)社交软件向多人发送同一条信息
(3) 数学软件累加求和,累加求积。
循环语句就是程序语言解决这种重复性计算的一种手段。
比方说,案例:计算1+2+3+……+10
除了用数列公式外,完全可以让计算机做100次循环累加。因为计算机的特点是计算速度非常快,我们让计算机循环一亿次也用不到1秒,所以很多计算的任务,人去算是算不了的,但是计算机算,使用循环这种简单粗暴的方法就可以快速得到结果。
public class Main { public static void main(String[] args) { // TODO Auto-generated method stub int sum=0; sum =sum+1; sum =sum+2; sum =sum+3; sum =sum+4; sum =sum+5; }
但是这样写法太麻烦,在程序语言中我们更愿意这样写:
public class Main { public static void main(String[] args) { int sum = 0; for (int i=1; i<=5; i++) { sum = sum + i; } System.out.println(sum); } }
这就是一个循环语句。它表示:。。。。
它能够很快速的循环执行5个加法运算,从而获得结果。
练习:计算1+2+3+...+10000的和
练习:计算1*2*3*....*10的积
for 循环
语法格式
- for循环是更加简洁的循环语句。for循环的基本语法格式如下:
for ([变量初始化]; [循环条件]; [变量更新]) { 循环体语句块 }
语句组成
循环语句一般包含如下4个部分:
- 初始化语句:一条或多条语句,这些语句用于完成一些初始化工作,初始化语句在循环开始之前执行,比如这里的int i=1;
- 循环条件:这是一个boolean表达式,这个表达式能决定是否执行循环体,比如这里的i<=100
- 循环体:这个部分是循环的主体,如果循环条件允许,这个代码块将被重复执行, 比如这里的sum = sum +i
- 变量更新:这个部分在每次循环体执行结束后,对循环条件求值之前执行。通常用于控制循环条件中的变量,使得循环在合适的时候结束,比如这里的i++
这四个部分只是一般性的分类,并不是每个循环中都非常清晰地分出了这四个部分。
public class Main { public static void main(String[] args) { int sum = 0; for (int i=1; i<=5; i++) { sum = sum + i; } System.out.println(sum); } }
执行顺序
为了描述方便,我们把初始化语句、循环条件语句、变量更新语句 分别命名为 A,B,C
for(语句A; 语句B; 语句C){ //循环体 }
其中,语句A在整个循环过程中,只会执行一次;语句B必须是布尔类型的表达式(当然也可以不写,如果写就必须是布尔类型表达式),通过该布尔表达式去判断是否继续执行循环体;语句C会在每次循环结束后执行,也就是说,循环体执行多少次,语句C就会执行多少次。
那么语句的执行顺序是:
语句A→(语句B → 循环体 → 语句C)→(语句B → 循环体 → 语句C)→ ... →退出循环
- 也可以通过下面这个图看出来 ?
- 图2-16 for循环流程图
- 程序执行for循环时,先执行循环的初始化语句,初始化语句只在循环开始前执行一次。每次执行循环体之前,先计算判断条件(也就是循环条件)的值,如果循环条件返回true,则执行循环体,循环体执行结束后执行循环迭代语句。因此,对于for循环而言,循环条件总是比循环体要多执行一次,因为最后一次执行循环条件返回false,将不再执行循环体。
- 摇一摇:程序是怎样在for语句里执行的
实例:for 循环简单应用
循环播放歌曲
public class Main { public static void main(String[] args) { // TODO Auto-generated method stub for(int i=0;i<5;i++) { System.out.println("世上有朵美丽的花"); System.out.println("那是青春吐芳华"); System.out.println("。。。"); } } }
群发拜年短信
public class Main { public static void main(String[] args) { // TODO Auto-generated method stub String [] menu = {"同学甲","同学乙","同学丙","好友A","好友丙"}; for(int i=0;i <5;i++){ System.out.println(menu[i]+" 新年快乐 !小王给您拜年了 !"); } } }
- 面馆程序:打印面馆里的每一种面
public class test02 { public static void main(String[] args) { // TODO Auto-generated method stub //String a ="hello"; String [] menu = {"阳春面","油泼面","鸡汤面","火鸡面","安徽板面"}; for(int i=0;i <5;i++){ System.out.println(menu[i]); } } }
执行科学计算
- 求1~1000所有偶数的和
public class Main { public static void main(String[] args) { // TODO Auto-generated method stub int sum=0; for(int i=0;i<1001;i++) { if(i%2 ==0) { sum +=i; } } System.out.println("sum="+sum); } }
写法2:
public class Main { public static void main(String[] args) { // TODO Auto-generated method stub int sum=0; for(int i=0;i<1001;i=i+2) { sum +=i; } System.out.println("sum="+sum); }
- 输出1~100之间的被7整除但不能同时被5整除的所有整数。
- 圆周率π可以使用公式计算,请利用for循环计算π:
public class Main { public static void main(String[] args) { double pi = 0; for (???) { // TODO } System.out.println(pi); } }
循环输入信息
- 例如:当循环变量count小于10时,执行循环体。
import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub int score;int sum=0; Scanner input = new Scanner(System.in); System.out.print("输入学生姓名:"); String name = input.next(); for(int i = 0; i < 5; i++) { System.out.println("请输入5门课中第"+(i+1)+ "门的成绩:"); score=input.nextInt(); System.out.println("5门课中第"+(i+1)+"门的成绩为:"+score); } System.out.println("循环结束"); input.close(); } }
头脑风暴:上述这些循环都有一个什么特点?
头脑风暴:上述循环输入有一个什么缺点?
- 练习:编写程序,求101+102+...+200的值
- 练习:编写程序,求1+2+4+...+64的值
- 练习:编写程序:求1-2+3-4+5-...+99-100的值
- 练习:输出100到999之间的水仙花数。
深入:关于for循环的几点讨论
初始化语句可以变吗?
答案:可以。
- 求1+2+3+...+100
package task4; public class For { public static void main(String[] args) { // TODO Auto-generated method stub int sum=0; for(int i=100;i>0;i--){ sum +=i; } System.out.println("sum="+sum); } }
- 求1+2+3+...+100
package task4; public class For { public static void main(String[] args) { // TODO Auto-generated method stub //1+100)+(2+99)+……(50+51)=? int sum = 0; for(int i=1,j=100;i<j;i++,j--){ sum+=i+j; } System.out.println("sum= "+sum); } }
循环条件可以变吗?
答案:可以
循环条件可以是任意的布尔表达式的组合。
- 求1~100的前10个偶数:
package task4; public class For { public static void main(String[] args) { // TODO Auto-generated method stub int count=0; for(int i=1;i<101 &&count<5;i++){ if(i%2==0) { System.out.println(i); count++; } } } }
变量迭代语句可以变吗 ?
答案:可以
任何使变量得到改名的式子都可以。
- 求1+2+4+...+ 64
int sum=0; for(int i=1;i<=64;i=i*2){ sum +=i; } System.out.println("sum="+sum);
- 头脑风暴:迭代语句可有可无吗 ?试试把i=i*2去掉。
灵活的for循环
- 在上面的循环语句中,for循环的初始化语句只有一个,循环条件也是一个简单的boolean表达式。实际上,for循环允许同时指定多个初始化语句,循环条件也可以是一个包含逻辑运算符的表达式。例如:
public class ForTestTwo { public static void main(String[] args) { //原while语句: //int count = 1,sum=0; //当count小于10时,执行循环体 //while(count <11) { //sum += count; //迭代语句 count++; //} for(int count=1,sum=0; count<10; sum += count,count++){ ; } System.out.println("1~10累加的结果为:"+sum); } }
- 上面代码中初始化变量有两个个,但是只能有一个声明语句,因此如果需要在初始化表达式中声明多个变量,那么这些变量应该具有相同的数据类型。
- for循环圆括号中只有两个分号是必须的,初始化语句、判断条件、迭代语句部分都是可以省略的,如果省略了循环条件,则这个循环条件默认为true,将会产生一个死循环。例如:
public class ForTestThree { public static void main(String[] args) { // 省略了for循环三个部分,循环条件将一直为true for(; ; ) { System.out.println("******"); } // 下面的语句不能到达,所以书写后有语法错误 //System.out.println("循环结束"); } }
- 运行上面程序,将看到程序一直输出******字符串,这表明此程序是一个死循环。
参考文档:https://www.liaoxuefeng.com/wiki/1252599548343744/1259540152578912