循环:反复多次执行一段相同或相似的代码
循环三要素:
- 循环变量的初始化
- 循环的条件(以循环变量为基础)
- 循环变量的改变(向着循环的结束变)
循环变量:在整个循环过程中所反复改变的那个数
例如:
输出5次"行动是成功的阶梯"
行动是成功的阶梯
行动是成功的阶梯
行动是成功的阶梯
行动是成功的阶梯
行动是成功的阶梯
循环变量:次数num
1)int num=0;
2)num<5
3)num++;
num=0/1/2/3/4/ 5时结束
循环结构
while结构
- 先判断后执行,有可能一次都不执行
1)语法:
while(boolean){
语句块/循环体----------反复执行的代码
}
2)执行过程:
判断boolean的值,若为true则执行语句块,
再判断boolean的值,若为true则再执行语句块,
再判断boolean的值,若为true则再执行语句块,
如此反复,直到boolean的值为false时,while循环结束
//1)输出5次"行动是成功的阶梯":
int num= 0; //1)循环变量的初始化
while(num<5){ //2)循环的条件
System.out.println("行动是成功的阶梯");
num++; //3)循环变量的改变
}
/*
执行过程:
num=0
true 输出 num=1
true 输出 num=2
true 输出 num=3
true 输出 num=4
true 输出 num=5
false while循环结束
*/
//2)输出9的乘法表:
int num = 1;
while(num<=9){
System.out.println(num+"*9="+num*9);
num++;
}
import java.util.Scanner;
//猜数字小游戏
public class Guessing {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = (int)(Math.random()*1000+1); //1到1000之内的随机数
//System.out.println(num); //作弊:提前输出答案
System.out.println("猜吧!");
int guess = scan.nextInt();
while(guess!=num){
if(guess>num){
System.out.println("太大了");
}else{
System.out.println("太小了");
}
System.out.println("猜吧!");
guess = scan.nextInt();
}
System.out.println("恭喜你猜对了!");
}
}
do…while结构:
-
先执行后判断,至少执行一次
当第1要素与第3要素的代码相同时,首选do…while
import java.util.Scanner;
//猜数字小游戏
public class Guessing {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = (int)(Math.random()*1000+1); //1到1000之内的随机数
System.out.println(num); //作弊
//假设num=250
//300(大),200(小),250(对)
int guess;
do{
System.out.println("猜吧!");
guess = scan.nextInt(); //1+3
if(guess>num){
System.out.println("太大了");
}else if(guess<num){
System.out.println("太小了");
}else{
System.out.println("恭喜你猜对了");
}
}while(guess!=num);
}
}
for结构:
- 应用率高、与次数相关的循环
1)语法:
// 1 2 3
for(要素1;要素2;要素3){
语句块/循环体---------------反复执行的语句 4
}
2)执行过程:
1243243243243243...2
for(int num=0;num<5;num++){
System.out.println("行动是成功的阶梯");
}
//特殊的: for中的循环变量num的作用域---仅在当前for中
for(int num=1;num<=9;num++){
System.out.println(num+"*9="+num*9);
}
/*
执行过程:
num=1 true 1*9=9
num=2 true 2*9=9
num=3 true 3*9=27
...
num=8 true 7*9=63
num=9 true 9*9=81
num=10 false for循环结束
*/
//演示for的特殊语法格式:
int num=1;
for(;num<=9;num++){
System.out.println(num+"*9="+num*9);
}
for(int num=1;num<=9;){
System.out.println(num+"*9="+num*9);
num++;
}
for(;;){ //没有条件的循环就是一个死循环
System.out.println("我爱Java");
}
import java.util.Scanner;
//随机加法运算器
public class Addition {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int score = 0; //总分
for(int i=1;i<=10;i++){ //10次 (1)25+65=?
int a = (int)(Math.random()*100); //加数a--0到99的随机数
int b = (int)(Math.random()*100); //加数b--0到99的随机数
int result = a+b; //存正确答案
System.out.println("("+i+")"+a+"+"+b+"=?"); //1)出题
System.out.println("算吧!");
int answer = scan.nextInt(); //2)答题
if(answer==-1){ //3)判题
break;
}
if(answer==result){
System.out.println("答对了");
score += 10; //答对1题,加10分
}else{
System.out.println("答错了");
}
}
System.out.println("总分为:"+score);
}
}
循环控制
break:跳出循环
for(int num=1;num<=9;num++){
if(num==4){ //在某种特定条件下,提前结束循环
break; //跳出循环
}
System.out.println(num+"*9="+num*9);
}
/*
执行过程:
num=1 1*9=9
num=2 2*9=18
num=3 3*9=27
num=4
*/
continue:跳过循环体中剩余语句而进入下一次循环
//输出9的乘法表,只要不能被3整除
for(int num=1;num<=9;num++){
if(num%3!=0){
System.out.println(num+"*9="+num*9);
}
}
//输出9的乘法表,跳过能被3整除的
for(int num=1;num<=9;num++){
if(num%3==0){
continue; //跳过循环体中剩余语句而进入下一次循环
}
System.out.println(num+"*9="+num*9);
}
/*
num=1 1*9=9
num=2 2*9=18
num=3
num=4 4*9=36
num=5 5*9=45
num=6
num=7 7*9=63
num=8 8*9=72
num=9
num=10 false
*/
三种循环结构如何选择:
- 先看循环是否与次数相关:
- 若相关-------------------------------------直接上for
- 若无关,再看第1要素与第3相互的代码是否相同:
- 若相同--------------------------------直接上do…while
- 若不同--------------------------------直接上while
嵌套循环:
- 循环中套循环,常常多行多列时使用,一般外层控制行,内层控制列
- 执行规则:外层循环走一次,内层循环走所有次
- 建议:嵌套层数越少越好,能用一层就不用两层,能用两层就不用三层
- break只能跳出当前一层循环
//九九乘法表
public class MultiTable {
public static void main(String[] args) {
for(int num=1;num<=9;num++){ //控制行
for(int i=1;i<=num;i++){ //控制列
System.out.print(i+"*"+num+"="+i*num+"\t");
}
System.out.println(); //换行
}
}
}