本章目录
回顾问题:输出100次“我爱你!”
for比while的代码更简洁,for语句封装了循环的4要素。
示例:使用for循环实现求1~100的和
int sum =0;
for (int i = 1; i<= 100; i++) {
sum += i; //累加求和
}
System.out.println("1~100的和为"+sum);
示例:输入一个学生姓名和5门课程成绩,求其总成绩
//通过循环依次接收每门课程成绩
for (int i = 1; i <= 5; i++){
System.out.printf("请输入第%d门课程成绩:\n", i);
score = sc.nextInt();
sum += score;//累加
}
System.out.printf("%s同学本次考试总成绩:%d", name, sum);
循环次数与循环控制变量的关系:
循环控制变量的初值
循环条件
循环控制变量改变
循环次数
int i = 0
i < 5
i++
5
int i = 0
i <= 4
i++
5
int i = 5
i > 0
i--
5
int i = 4
i >= 0
i--
5
示例:输入一个数字求其加法表
Scanner input = new Scanner(System.in);
System.out.println(" 请输入一个数字 :");
int num = input.nextInt();
System.out.println(" 数字 "+num+" 的加法表如下 :");
for (int i = 0,j = num; i<=num; i++,j--) {
System.out.printf("%d + %d = %d\n",i,j,num);
}
for循环常见问题:
(1)省略表达式1,如for;表达式2;表达式3)。表达式1用于对循环控制变量进行初始化,省略for循不的表达式1,不会出现语法错误,我们可以将循环控制变量初始化放置到for循环之前。例如:
int i=1;
for(; i<=5; i++) {
System.out. printin( "Hello Java!" );
}
(2)省略表达式2,如for(表达式1;表达式3)。表达式2用于判断循环条件是否成立,省略表达式2后,即没有循环判断,循环条件永远为真。此时,循环将出现死循环。例如:
for(int i = 1; ; i++){
System.out.printIn( "Hello Java!" );
}
(3)省略表达式3,如for( 表达式1;表达式2;)。表达式3用于修改循环控制变量的值,省略表达式3后,循环控制变量的值不会变化,这样会导致循环永远为真,出现死循环。为了避免出现死循环,可以将表达式3放置于循环操作中,以达到未省略表达式3的效果。例如:
for(int i =0; i < 5;){
System.out.printin( "Hello Java!" );
i++;
}
(4)省略所有的表达式,如for(; ;)o省略for循环的三个表达式后,该循环则为死循环,想要结束死循环可以通过跳转语句实现。省略for循环的表达式后,不会导致程序的语法错误,但是程序的结构不够清晰,不便于阅读与维护。建议使用for循环时尽量不省略任何一一个表达式。
(1)表达式:声明变量num用于储蓄用户输入的数字,找查能够整除num的数字,需从1开始直到num-1为止,因此,声明变量i作为循环控制变量,for循环结构中的3个表达式如下:
表达式1:int i = ;
表达式2:i < num
表达式3:i++
(2)循环操作:重复执行的操作是逐一判断1、2、3、…. num-1,能否被num整除,若能够被整除,则将对应数字进行累加。因此,声明变量sum,用于存储累加值,设置初始值为0,由于需要从1开始进行判断,而1的初始值也为1,此时,只需将i反复与num进行整除判断即可,将能整除num的i累加至sum中。
示例:在控制台中输入一个自然数,判断该数字是否为完全数。完全数,又称完美数,是指能整除该数字的所有数字(除本身外)之和等于本身的数字。
// 使用循环,在 1 ~ num-1中查找能整除 num的数字
for (int i = 1; i < num; i++) {
// 若能够整除 num,则进行累加
if (num % i == 0)
sum += i;
}
if (sum == num) // 若累加之和与 num相等,则为完全数
System.out.printf("%d 是完全数 \n", num);
else
System.out.printf("%d 不是完全数 \n", num);
示例:在控制台中输出100~999之间所有的“水仙花数”。水仙花数是指各位数字的3 次幂之和等于本身的数字。例如:数字153。
for (int i = 100; i < 1000; i++) {
// 分离个位数字
int s = i%10;
int t = i/10%10;
int h = i / 100;
// 判断是否为水仙花数
if (i == s * s * s + t * t * t + h * h * h)
System.out.println(i);
}
(1)区别1:语法
(2)区别2:执行顺序
while 循环:先判断,再执行
do-while循环:先执行,再判断
for循环:先判断,再执行
(3)区别3:适用情况
循环次数确定的情况,通常选用for循环
循环次数不确定的情况,通常选用while或do-while循环
思考:年存款利率为3%, 本金为10000元,当存款总额超过 12000 元时,收益具体是多少 ?
分析:
需求:该业务可以转换为“当”存款总额小于12000元时,以3%利率增长。
条件:存款 < 12000。
结论:不明确循环次数,也无序先执行循环体,则用while循环
示例:年存款利率为3%, 本金为10000元,当存款总额超过 12000 元时,收益具体是多少 ?
double total = 10000;// 起始余额
double income;// 收益
while (total <= 12000) {
total = total + (total * 0.03); // 增加收益后的余额
}
income = total - 10000; // 收益赋值
System.out.printf(" 收益为 %.2f ", income);
思考:西游记中,孙悟空让猪八戒挑水,直到孙悟空满意为止。
分析:
需求:孙悟空让猪八戒挑水,猪八戒在每次挑完水后询问孙悟空还需要挑水与否,直到孙悟空说不用挑水为止。
条件:孙悟空说需要挑水。
结论:不明确循环次数且需要在执行一次后再次询问,所以使用do-while
示例:西游记中,孙悟空让猪八戒挑水,直到孙悟空满意为止。
do{
count++;
System.out.printf(" 猪八戒挑了第 %d 桶水后。\n",count);
System.out.println(" 猴哥,还要继续挑水吗? [y/n]");
answer = sc.next().charAt(0);
}while(answer == 'y' || answer == 'Y');
System.out.printf(" 猪八戒一共挑了 %d桶水后,停止了挑水工作。",count);
经验:
如果业务中可以获取到一个确切的循环次数,可以考虑用for循环,简而言之就是如果明确知道要重复几次做同样的事情,则使用 for 循环。
for语句场景:如果存在一个确切循环次数时,优先选择for循环实现。
在选择循环结构时,不是只有某种循环才能解决问题,而是优先选择对应的循环会使得代码更简单,业务处理更方便。
break:改变程序控制流程
用于do-while、while、for中时,可跳出循环而执行循环后面的语句
示例:输入一个区间,找出区间中第一个能够被3整除的数字。
Scanner sc = new Scanner(System.in);
int start, end;//区间
System.out.println("请输入一个区间:");
start = sc.nextInt();
end = sc.nextInt();
System.out.println("区间中能够被3整除的第一个数字:");
for (int i = start; i <= end; i++) {
if (i % 3 == 0) {
System.out.println(i);
break;//跳出循环结构
}
}
System.out.println("查找结束");
continue:只能用于循环中
continue作用:跳过循环体中剩余的语句而执行下一次循环
示例:编写Java程序,累加1~99数字之和,要求跳过各位中含有3的数字。
int sum = 0;
for (int i = 1; i < 100; i++) {
int s = i % 10;//分割个位
int t = i / 10;//分割十位
if (s == 3 || t == 3)
continue;//进入下次循环
sum += i;//累加满足条件的数据
}
System.out.println("1~99之间各位中不包含3的数字之和:" + sum);
手机扫一扫
移动阅读更方便
你可能感兴趣的文章