目录
一:Java中的三大循环结构
- for 循环
- while 循环
- do - while 循环
1.循环的含义
-
所谓循环就是在条件满足的情况下重复执行一段代码。
二. for 循环
-
for 循环的四大要素
-
循环变量赋初值。
-
循环条件。
-
改变变量的值。(ag:i++ ,i-- , i*=2 )
- 语法
for(循环变量赋初值;循环条件;循环变量增值){
循环语句;
}
ps:其中“循环语句;”就是循环体,可以是一个简单的语句,也可以是一个用“ { } ”括起来的复合语句。
例:
public class lian {
public static void main(String[] args) {
for (int i = 1;i <= 3;i++);
}
}
- 流程图
- 执行机制
-
先执行循环变量赋初值语句。
-
再判断循环条件,若为假(值为0),则结束循环,转到 5 ;若其值为真(值非0),则执行循环体语句。
-
执行循环变量增值语句。
-
转回 2 继续执行。
-
循环结束,执行 for 语句的下一条语句。
for循环案例
- 打印一百遍“清澈的爱只为中国!”。
public class lian {
public static void main(String[] args) {
for (int i = 1; i <= 100; i++) {
System.out.println("第" + i + "次清澈的爱只为中国!");
}
}
}
ps:赋初值只执行一次(int i = 1)。
练习题
- (一)计算100以内的奇数和以及偶数和
public class lian {
public static void main(String[] args) {
int odd = 0;
int even = 0;
for (int i = 1; i <= 100; i++) {
if (i % 2 == 0){//证明为偶数
even +=i;//加到偶数和中
}else {//证明为奇数
odd +=i;//加到奇数和中
}
}
System.out.println("奇数的和为:" + odd + "\n" + "偶数和为:" + even);
}
}
- (二) 求1x2+2x3+3x4······+100x101的和是多少?
public class lian {
public static void main(String[] args) {
int sum = 0;
for (int i= 1;i <= 100;i++){
//这个循环控制的是表达式的个数
int temp = i*(i + 1);
sum += temp;
}
System.out.println("总和为:" + sum);
}
}
三.break和continue
1.break
-
break可以改变程序控制流(可跳出循环而执行循环后面的语句)。
-
break是强制跳出。(强制结束整个循环,让流程跳转到 for 循环右大括号之后)。
break案例
- 输入一个数,判断其是不是素数。
- 提示:素数是只能被1和它本身整除的数字。
ag:2是最小的素数。
import java.util.Scanner;
public class lian {
public static void main(String[] args) {
System.out.println("请输入一个整数:");
//接收一个数字
Scanner input = new Scanner(System.in);
int num = input.nextInt();
//假设每一个数都是素数
boolean flag = true;
if(num == 1){
flag = false;
}
for (int i = 2; i < num; i++) {
//判断i是否能够被num整除
if (num % i == 0) {
//如果被num整除,那么就不是素数
flag = false;
break;
}
}
if (flag == true) {
System.out.println(num + "是素数");
} else {
System.out.println(num + "不是素数");
}
}
}
2.continue
- continue的作用是结束本次循环,下次循环会继续。不会结束整个循环。(跳过循环体中剩余的语句而执行下一次循环)
continue案例
- 小明和朋友们玩一个“逢7必过”的小游戏。游戏规则是:大家围成一圈,从1开始报数,但逢7的倍数或者尾数是7,则不去报数,要喊“过”。试编一程序,模拟游戏1~50的报数。
public class lian {
public static void main(String[] args) {
for (int i = 1; i <= 50;i++){
if (i % 7 == 0 || i % 10 == 7){
System.out.println("过");
continue;
}
System.out.println(i);
}
}
}
练习题
- 水仙花数是一个三位数,它等于自己各个数位上数字的立方和。(ag:153=1的3次方+5的3次方+3的3次方)
- 编写一个程序,求出所有的水仙花数。
public class lian {
public static void main(String[] args) {
for (int i = 100;i <= 999;i++){
//拆分数位
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100;
if (ge * ge * ge + shi * shi *shi + bai * bai *bai == i){
System.out.println(i);
}
}
}
}
3.break和continue区别
使用场合
-
break 常用于 switch 结构和循环结构中。
-
continue 一般用于循环结构中。
作用(循环结构中)
-
break 语句终止某个循环,程序跳转到循环块外的下一条语句。
-
continue 跳出本次循环,进入下一次循环。
四.while循环
- 语法
while(循环条件){
循环操作
}
- 特点:先判断,再执行
- 含义
先计算循环条件的值,当循环条件的值为真(循环条件成立)时,去执行一次循环体。和 if 语句不同的是,执行完一次循环体后,while 语句又回到开始处,继续计算和判断表达式的真假,决定是否再次执行循环体。也就是“当表达式成立时,不断重复执行循环体”,所以又称为“当型循环”。
while循环案例
- 编写一个程序,使用 while 循环在屏幕上输出1~100这几个数字。
public class lian {
public static void main(String[] args) {
int i = 1;
while (i <= 100){
System.out.println(i);
i++;
}
}
}
练习
- 求 6 + 12 + 18 + 24 +······+ 180的和是多少?
import java.util.Scanner;
public class lian {
Scanner input = new Scanner(System.in);
public static void main(String[] args) {
int i = 6;
int sum = 0;
while (i <= 180) {
sum += i;
i += 6;
}
System.out.println("总和是:" + sum);
}
}
- 对于正整数n,m,求s=1+2+3·····+n,当加到第几项时,s的值会超过m?
import java.util.Scanner;
public class lian {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int num = input.nextInt();
int i = 1;
int sum = 1;
while (sum <= num) {
i++;
sum += i;
}
System.out.println(i);
}
}
for 和 while的区别
-
for 处理的场景是循环次数已经知道的情况,while 处理的是循环次数位置的情况。
-
for 循环小括号里面可以写三大要素:while 循环小括号中只有一个循环条件,注意:不要忘记在循环体中写i++改变变量的值,否则会造成死循环。
五.do - while 循环
- 语法
do{
循环操作
}while(循环条件);
- 特点:do - while循环至少会执行一次。
- 流程图(ag:生活中考驾照的例子)
练习题
- (一)拍手游戏
-
小明每一秒拍手一次,小红每2秒拍手一次,小刚每4秒拍手一次。如果三人同时开始第一次拍手,且都只拍10次,那么我们能听到多少声掌声?
public class lian {
public static void main(String[] args) {
int ming,hong,gang;//三位同学的拍手次数
ming = hong = gang = 1;//时间是第0秒的时候,每人都拍一次手
int time = 0,num = 1;//num:我们听到的掌声次数
boolean flag = false;//有没有人拍手
do {
flag = false;
//时间在流动
time++;
if (ming < 10){//判断拍够10次了吗
ming++;
flag = true;
}
if (hong < 10 && time%2 == 0){
hong++;
flag = true;
}
if (gang < 10 && time % 4 == 0){
gang++;
flag = true;
}
if (flag == true){
//证明有人拍手
num++;
}
}while(ming + hong + gang < 30 );//一共最多30次掌声
System.out.println(num);
}
}
-
(二)报数游戏
-
小明和小红玩报数游戏,小明按照1~20进行循环报数,小红按照1~30进行循环报数。若两个人同时开始报数,并且以同样的速度报数,当两个人报了1000个数时,同时报相同数的次数是多少?
public class lian {
public static void main(String[] args) {
int ming = 0,hong = 0;
int num = 0;//num:报的数字的个数
int count = 0;//count:报相同数字的个数
do {
ming++;
if (ming > 20) {
ming = 1;
}
hong++;
if (hong > 30) {
hong = 1;
}
//如果报的数字相同
if (ming == hong) {
count++;
}
num++;
}while (num < 1000);
System.out.println(count);
}
}
六.练习题
- (一)有一根长15米的铁丝,有一根长18米的铁丝,要把它们截成同样长的小段,不许剩余,那么每段最长有几米?
public class lian {
public static void main(String[] args) {
//寻找两个数字的最大公约数
int num1 = 15;
int num2 = 18;
//辗转相除法
int r = num1 % num2;
while (r != 0){
//继续相除
num1 = num2;
num2 = r;
r = num1 % num2;
}
System.out.println(num2);
}
}
ps:辗转相除法:用较大数除以较小数,再用出现的余数去除除数,如此反复,直到最后余数为0为止。此时的除数就是这两个数的最大公约数。所以在代码中不断的变更除数和被除数来取余。