六、循环结构

6.1 while循环

6.1.1 什么是循环

一组相同或相似的语句被有规律的重复执行

循环要素:

  • 循环条件
  • 循环体

6.1.2 while的执行逻辑

while(boolean 表达式) { //当boolean表达式的值为true时执行循环体
    循环体;
    }

6.1.3 while用于处理循环逻辑

//计算0-100的和
int i = 0;//循环变量
int sum = 0;//结果
while(i <= 100) {
    sum += i;//累加
    i ++;//循环变量自增
    }

6.1.4 while循环和break配合使用

break关键字一般用于跳出循环
//计算0-50的和
int i = 0;//循环变量
int sum = 0;//结果
while(i <= 100) {
    sum += i;//累加
    i ++;//循环变量自增
    if(i == 50) {break;}
    }

6.1.5 猜数字案例V1.0

System.out.println("请输入0-100内的整数:");
Scanner scan = new Scanner(System.in);
//设置输入的范围在100以内
//int randomNumber = (int)(Math.random()*100);
//等价于
Random rand = new Random();   //产生随机数
int randomNumber = rand.nextInt(100);    //设置随机数的范围0~99
//int randomNumber = rand.nextInt(90)+10;    //设置随机数的范围10~99

while(true) {
    int userNumber = scan.nextInt();
    if(userNumber > randomNumber) {
        System.out.println("大了");
    } 
    else if(userNumber < randomNumber){
        System.out.println("小了");
    } 
    else {
        System.out.println("猜对了");
        break;
    }
}

6.2 do while循环

6.2.1 do while的执行逻辑

do{
    循环体
}while(boolean表达式);// 当boolean表达式为true,会执行循环体

6.2.2 do while 用于处理循环逻辑

int pwd;
do{
    System.out.println("请输入密码");
    pwd = scan.nextInt();
}while(pwd != 123456);// 判断输入的密码是否为123456,直到输对为止

6.2.3 do while和while的区别

while是先判断后执行的,而do while是先执行后判断
do while无论满不满条件都先执行一次循环体

6.2.4 案例-猜数游戏V02

System.out.println("请输入0-100内的整数:");
Scanner scan = new Scanner(System.in);
//int randomNumber = (int)(Math.random()*100);
Random rand = new Random();
int randomNumber = rand.nextInt(100);
int userNumber = 0;
do {
    userNumber = scan.nextInt();
    if(userNumber > randomNumber) {
        System.out.println("大了");
    } 
    else if(userNumber < randomNumber){
        System.out.println("小了");
    } 
    else {
        System.out.println("猜对了");
//break;可以不用了。原因是先执行了再去判断的当。相等时就不再执行循环体了
    }
}while(randomNumber != userNumber);

6.3 for循环

6.3.1 for语句的执行逻辑

for(表达式1;表达式2;表达式3) {
循环体
}
1.表达式1 只执行第一次,后续的循环从表达式2开始
2.表达式2 如果为true 如果为false 则不执行直接跳出
3.循环体
4.表达式3

6.3.2 for用于固定次数的循环

//0-100的累加
int sum = 0;
for(int i = 0; i <= 100; i ++ ) {
    sum += i;
}

6.3.3 for循环的三要素

循环变量的定义:int i = 0;
循环条件:i <= 100;
循环变量的变化:i++;

//第一种
int i = 0;
for(; i <= 100 ; i ++) {
    循环体
}
//第二种
int i = 0;
for(; i <= 100 ; ) { //!!循环变量二不能变形
    循环体
    i ++;
}
//for循环的死循环
for(;;){
    循环体
}

总结: for循环必须要有两个分号";"

6.3.4 for循环中break和continue关键字

for和break搭配使用,一般情况下需要和条件分支结构搭配使用

break和break的区别:

  • break:跳出所有循环
  • continue:跳出本次循环
int sum = 0;
for(int i=1; i<=100; i++){
    if( i % 10 == 3) {
        continue;
    }
    sum += i;
}//累加,跳过了各位数位3的所有数字

6.3.4 案例–质数的提取

boolean isFlag = true;
public void show(){

    for (int i = 2; i <= 100; i++) {//打印输出的数
        for (int j = 2; j < i; j++) {//数字的遍历(去掉1和其本身)
            if(i%j==0){//能被除尽
                isFlag = false;
            }
        }
        if(isFlag==true){
            System.out.println(i);
        }
        isFlag=true;//重置,否则只能输出2,3,因为到4时isFlag其已经变成了false
    }
}
  • 优化
boolean isFlag = true;
//获取当前时间毫秒数
long start = System.currentTimeMillis();
public void show(){

    for (int i = 2; i <= 100000; i++) {//打印输出的数
        for (int j = 2; j <= Math.sqrt(i); j++) {//数字的遍历(去掉1和其本身)(优化二:Math.sqrt(i):2*6、3*4和4*3、6*2的问题直接吧后半不半直接求掉)
            if(i%j==0){//能被除尽
                isFlag = false;
                break;//只对非质数的自然数(优化1:提速大概10倍)
            }
        }
        if(isFlag==true){
            System.out.println(i);
        }
        isFlag=true;//重置,否则只能输出2,3,因为到4时isFlag其已经变成了false
    }

    //代码运行结束时所花费的时间
    long end = System.currentTimeMillis();
    double cha = end-start;
    System.out.println("运行所花费的时间:"+cha);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值