在满足一定的条件下,重复做且有一定规律的事情。
生活中的,围绕操场跑步,跑10圈,从第一圈起到第10圈结束。数钱,钱的总数是不变得,每数一张记录一张直到数完全部。打印机打印固定的纸张。从第一张直到打印完成。
以上的过程都是循环结构。
思考 如果跑圈的话没有说跑多少圈?就会一直跑下去… …出现无限循环, 所以要在跑的时候就规定一定的范围,避免出现这样的情况发生。
在Java中给我们提供了三种循环,分别是 while 循环语句,do… while循环语句,for循环语句。
1.while循环跑圈,每跑一次输出一圈,一共100圈,要是我们以前如何去处理这样的问题。
System.out.println("跑了第1圈");
System.out.println("跑了第2圈");
System.out.println("跑了第N圈");
... ...
System.out.println("跑了第100圈");
1.1 while语法结构
初始化循环变量;
while(判断条件){ // 返回条件表达式是boolean类型,如图为true就进入循环执行
执行语句;
步长; // 如果没有控制,就会出现无限循环。
}
public class WhileDemo {
public static void main(String[] args) {
// while循环语法结构
int num = 1;// 从第一圈开始跑
while (num<=100){
System.out.println("跑了第"+num+"圈");
num++; //步长又相当于程序的出口
}
}
1.1.1 练习: 检查做家务
姐姐每天都要打张三一顿,上午做家务,下午姐姐检查,如果下午张三没有完成,姐姐就打一顿,如果张三完成了,姐姐就放过他,让他玩一会。
public class WhileDemo01 {
public static void main(String[] args) {
System.out.println("姐姐问:张三家务做完了么?y或者n");
Scanner input = new Scanner(System.in);
String answer =input.next();
//直到做完才可以玩。
while ("n".equals(answer)){
System.out.println("打一个嘴巴,然后过了一会问做完了么?");
answer =input.next(); //相当于步长
}
System.out.println("可以去玩了");
}
}
输出结果:
姐姐问:张三家务做完了么?y或者n n 打一个嘴巴,然后过了一会问做完了么? n 打一个嘴巴,然后过了一会问做完了么? y 可以去玩了1.1.2 练习:100以内的偶数之和
public class WhileDemo01 {
public static void main(String[] args) {
//求和 sum
int sum =0;
int num = 0; //初始化变量
while (num<=100){
sum = sum+num;
num=num+2; // 步长改为每2数一次
}
System.out.println("100以内的偶数和是 "+sum);
}
}
输出结果:
25502. do… while 循环 2.1 do… while 语法结构
while循环是 先判断再执行,do…while是 先执行,再判断。小伙伴们是不是有一点懵逼?在现实生活中去饭店,先点菜然后吃饭,过一会在判断有没有吃饱,或者菜够不够,如果没吃饱就接着吃。
do{
循环操作;
}while(判断条件);
2.1.1 练习:猜数字
public class GuessNum {
public static void main(String[] args) {
//随机生成一个数字 10以内的数
int random = (int)(Math.random()*10);
System.out.println("请输入你要猜的数字:");
Scanner input = new Scanner(System.in);
int guess;
do {
guess =input.nextInt(); //相当于程序出口
if (guess>random){
System.out.println("猜大了... ...请重猜");
}else if(guess
输出结果:
4
请输入你要猜的数字:
2
猜小了... ...请重猜
6
猜大了... ...请重猜
小结:do… while和while区别
相同点:while循环和do… while循环都是在不确定循环次数时使用。
3. for 循环
for循环是Java程序设计中最有用的循环语句之一。相对于不固定循环次数的while来说,for是有固定次数的。
3.1 for 语法结构
for(参数初始化;条件判断;更新循环变量){
执行循环语句;
}
for循环输出和while循环输出对比,输出,“10次好好学习!”
public static void main(String[] args) {
int i = 1;
while (i<=10){
System.out.println("好好学习第"+i+"次");
i++;
}
System.out.println("---------华丽的对比线--------------");
for (int j=1;j<=10;j++){ //思考一下?可以到着输出么?
System.out.println("好好学习第"+j+"次");
}
}
3.2 for 循环执行顺序
int i=1;
for (;i<=100;){
System.out.println("输出第"+i+"次");
i++; // 相当于 i=i+1;
}
3.3 练习:求10以内奇数和,偶数和
public static void main(String[] args) {
int jShu =0; //保存奇数
int oShu =0; //保存偶数
for(int i=0;i<=10;i++) {
if(i%2==1) {
jShu = jShu+i;
}else if(i%2==0) {//思考一下?为啥用else if判断??
oShu = oShu+i;
}
}
System.out.println("奇数和是"+jShu+"n偶数和是"+oShu);
}
输出结果:
奇数和是25
偶数和是30
3.4 练习:求5人平均身高
控制台接受5人的身高,并算出平均身高多少?
public static void main(String[] args) {
double high; //身高
double sum=0; //求和,并初始化
for (int i=1;i<=5;i++){
System.out.println("请输入第"+i+"个人的身高");
high = new Scanner(System.in).nextDouble();
sum =sum+high; // 求和
}
System.out.println("平均身高是"+sum/5);
}
}
输出结果:
请输入第1个人的身高
1.60
请输入第2个人的身高
1.60
请输入第3个人的身高
1.70
请输入第4个人的身高
1.80
请输入第5个人的身高
1.90
平均身高是1.72
3.5 练习:计算商场顾客占比
商场对顾客的年龄层次进行调查计算各年龄层次的顾客比例。
例如:依次控制台输入消费人年龄, 20岁以下的人消费占比是多少?(10人为例)
public static void main(String[] args) {
double count=0; //记录占比人数
for (int i=1;i<=10;i++){
System.out.println("请输入第"+i+"个人的年龄:");
int age = new Scanner(System.in).nextInt();
if (age>0&&age<=20){
//注意这里面是 统计多少人
count++;
}
}
System.out.println("20岁以下的人有"+count/10);
}
输出结果:
请输入第1个人的年龄:
28
请输入第2个人的年龄:
23
请输入第3个人的年龄:
26
请输入第4个人的年龄:
29
请输入第5个人的年龄:
68
请输入第6个人的年龄:
99
请输入第7个人的年龄:
18
请输入第8个人的年龄:
19
请输入第9个人的年龄:
20
请输入第10个人的年龄:
36
20岁以下的人有0.3
4. 跳转语句
4.1 break
break 主要用在 循环语句 或者 switch 语句中。
a. 用于终止某个循环,使程序跳到循环体外的下一个语句.
b. 在循环中位于break 后的语句将不在执行(后有语句也会报错),循环也停止执行.
public static void main(String[] args) {
for (int j=1;j<=10;j++){
if(j%2==0){
System.out.println("好好学习第"+j+"次");
break;
// System.out.println("break"); 报错的因为在break后
}
}
System.out.println("break结束后我来执行!");
}
输出结果:
好好学习第2次
break结束后我来执行!
4.2.1 练习:循环输入成绩,遇负提示错误
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
double score;
double sum=0;
// 设置标志,假设开始不为负数。
boolean flag=false;
for (int i=1;i<=5;i++){
System.out.println("请输入第"+i+"次成绩:");
score = input.nextDouble();
if (score<0){
flag=true; //如果输入为负数,就设置
break;
}else{
sum+=score;
}
}
//?思考如何提示,请从新输入
if (flag==true){
System.out.println("您输入的有误,请重新输入");
}else{
System.out.println("5门课的平均成绩为:"+sum/5);
}
}
输出结果:
请输入第1次成绩:
50
请输入第2次成绩:
-30
5门课的平均成绩为:10.0
您输入的有误,请重新输入
4.2 continue
continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代,不是终止。
a. 当满足判断条件时,用于跳过本次循环,执行下一次循环.
b. 不满足判断条件,就正常执行=== 满足条件,就跳过本次。
public static void main(String[] args) {
for (int j=1;j<=10;j++){
if(j%2==0){
System.out.println("好好学习第"+j+"次");
continue; //跳过本次循环执行下一次
}
}
System.out.println("continue结束后我来执行!");
}
输出结果:
好好学习第2次
好好学习第4次
好好学习第6次
好好学习第8次
好好学习第10次
continue结束后我来执行!
4.2.练习:录入成绩,求占比例
根据输入的人数,来确定循环输入每人的Java课成绩,统计大于70分学生的占比。如下,输出
请输入要录入的人数:
3
请输入第1科的成绩:
80
请输入第2科的成绩:
52
请输入第3科的成绩:
30
70分以上的人是1个
70分以上的人占0.3333333333333333
代码如下:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入要录入的人数:");
int num =input.nextInt();
//成绩 double score
double score;
int result=0;
for(int i=1;i<=num;i++){
System.out.println("请输入第"+i+"个人的的成绩:");
score = input.nextDouble();
if (score<70){
continue; //明白continue跳转语句的使用
}
result++; //累计高于70分的
}
System.out.println("70分以上的人是"+result+"个");
System.out.println("70分以上的人占"+result*1.0/num);
}
4.3 break 和 continue对比总结
使用场景
a. break;常用于switch选择结构 , if选择结构 和 for 循环结构中;
b. continue;一般用于 循环结构 中;作用(循环结构中)
a. break;终止某个循环,程序循环结束,跳转到 循环块外的下一条语句;
b. continue ;跳出本次循环(就是本次不输出),执行下一次循环。
5. 二重for循环
5.1 for… for语法结构
双重for循环又叫嵌套for循环,即for循环里面套for循环。
a.根据外层for的条件,判断里层是否执行,如果执行,就将里层for循环都循环完毕后再执行外层for循环,继续判断。即 外层循环执行一遍,内层循环执行多遍。
for (循环开始位置;判断条件;改变循环条件){ //外层循环for
for (循环开始位置;判断条件;改变循环条件){ // 内层循环for
执行语句;
}
}
5.2 练习:打印矩形
*****
*****
*****
*****
*****
代码如下:
for (int i=1;i<=5;i++){
for (int j=1;j<=5;j++){
System.out.print("*"); //内循环执行语句
}
System.out.println(); //换行
}
思考问题:
哪个循环控制了行数?哪个循环控制列数(或输出次数)?
5.3 练习:打印直角三角形
public class ForForDemo2 {
public static void main(String[] args) {
System.out.print("请输入控制的打印的行数:");
int rows = new Scanner(System.in).nextInt();
for (int i=1; i<=rows;i++){ //外循环
for (int j=1;j<=i;j++){ // 这个j怎么写?能写死么?j
System.out.print("*");
}
//换行
System.out.println();
}
}
}
输出结果:
请输入控制的打印的行数:5
*
**
***
****
*****
思考问题:
如果打印每行输出为1 、3 、5、 7 的三角形改怎么做?
*
***
*****
*******
5.4 练习:打印倒直角三角形
如何把正直角三角形,反转过来成为倒直角三角形?
*****
****
***
**
*
代码如下:
public class ForForDemo4 {
public static void main(String[] args) {
System.out.println("输入打印行数:");
int rows = new Scanner(System.in).nextInt();
for (int i=1;i<= rows;i++){
for (int j=rows;j>=i;j--){
System.out.print("*");
}
System.out.println(" ");
}
}
}
5.5 经典练习: 打印 99乘法表
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
代码如下:
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
//需要拼装 格式
System.out.print(j + "x" + i + "=" + i * j + " ");
}
System.out.println();
}
}



