JavaSE学习day4_01 循环for,while,do...while

1. 循环高级

1.1 无限循环

for、while、do...while都有无限循环的写法。

最为常用的是while格式的。

因为无限循环是不知道循环次数的,所以用while格式的

代码示例:

while(true){
    
}

1.2 跳转控制语句(掌握)

  • 跳转控制语句(break)

    • 跳出循环,结束循环

  • 跳转控制语句(continue)

    • 跳过本次循环,继续下次循环

  • 注意: continue只能在循环中进行使用!而目前我们知道break仅只能在循环和switch中使用。

以下几个代码逻辑性较强,需认真看,认真思考。

练习1:逢7过

需求:

朋友聚会的时候可能会玩一个游戏:逢7过

游戏规则:从任意一个数字开始报数,当你要报的数字是包含7或者是7的倍数时都要说过:过

需求:使用程序在控制台打印出1-100之间的满足逢七必过规则的数据

代码示例:

public class LoopDemo4 {
    public static void main(String[] args) {
        //目标:听懂并且自己独立写出来
        //核心:
        //不报数字的条件:
        //个位是7   十位是7  7的倍数
        //三个条件只要满足一个,就不报数字
​
        //游戏的规则
        //1 2 3 4 5 6 过 8 9 10 11 12 13 过 15 16 过 18 19 20 过...
​
        //循环的开始条件:1
        //结束条件:100
        for (int i = 1; i <= 100; i++) {
            //i依次表示这个范围之内的每一个数字
            if (i % 10 == 7 || i / 10 % 10 == 7 || i % 7 == 0) {
                System.out.println("过");
                continue;
            }
            System.out.println(i);
        }
​
    }
}

练习2:求平方根

需求:

键盘录入一个大于等于2的整数 x ,计算并返回 x 的 平方根 。

结果只保留整数部分 ,小数部分将被舍去 。

代码示例:

public class LoopDemo5 {
    public static void main(String[] args) {
        //目标:听懂思路并且自己独立写出来
​
        //键盘录入10
        // 1 * 1 = 1 < 10
        // 2 * 2 = 4 < 10
        // 3 * 3 = 9 < 10
        // 4 * 4 = 16 > 10
        //说明:10的平方根在3~4之间。保留整数之后:3
​
​
        //键盘录入20
        //1 * 1 = 1 < 20
        // 2 * 2 = 4 < 20
        // 3 * 3 = 9 < 20
        // 4 * 4 = 16 < 20
        // 5 * 5 = 25 > 20
        //说明:20的平方根在4~5之间,保留整数之后:4
​
        //键盘录入40
        //1 * 1 = 1 < 40
        // 2 * 2 = 4 < 40
        // 3 * 3 = 9 < 40
        // 4 * 4 = 16 < 40
        // 5 * 5 = 25 < 40
        // 6 * 6 = 36 < 40
        // 7 * 7 = 49 > 40
        //说明:40的平方根在6~7之间,保留整数之后:6
​
        //思路:
        //从1开始循环,拿着循环得到的每一个数求平方。
        //拿着结果,跟键盘录入的数字比较。
        //如果平方之后的结果 == 录入的数字    表示当前数字就是我们题目的结果
        //如果平方之后的结果 <  录入的数字    循环继续
        //如果平方之后的结果 >  录入的数字    表示前一个数字就是我们题目的结果
        //循环的开始条件:1
        //循环的结束条件:键盘录入的数字
​
        //1.键盘录入数字
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数");
        int number = sc.nextInt();
        //2.循环找结果
        for (int i = 1; i <= number; i++) {
            //循环体
            if (i * i == number) {
                System.out.println(number + "的平方根为" + i);
                //如果已经找到了,那么后面就不需要再运行了,循环直接停止
                break;
            }else if(i * i > number){
                System.out.println(number + "的平方根为" + (i - 1));
                //如果已经找到了,那么后面就不需要再运行了,循环直接停止
                break;
            }
        }
    }
}

练习3:求质数

需求:

键盘录入一个正整数 x ,判断该整数是否为一个质数。

代码示例:

public class LoopDemo6 {
    public static void main(String[] args) {
        //目标:听懂思路并且自己独立写出来
​
        //质数:只能被1和本身整除的数。
        //7 是一个质数
        //13 是一个质数
        //8 不是一个质数
        //25 不是一个质数
​
        //1.键盘录入一个正整数
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数");
        int number = sc.nextInt();
        //2.利用循环进行判断
        //思路一:从1开始到本身number结束,在这个范围之内,有多少个数字能被键盘录入的number整除
        //如果只有两个,那么表示number是一个质数。
​
        //思路二:从2开始到number-1结束,在这个范围之内,有多少个数字能被number整除
        //如果没有数字,那么表示number是一个质数。
​
        //思路二循环的开始条件:2
        //循环的结束条件:number-1
        int count = 0;
        for (int i = 2; i < number; i++) {
            //i依次表示,2~ number-1 这个范围之内的每一个数字
            //要求的是,在这个范围之内,有多少个数字能被number整除
            if(number % i == 0){
                count++;
            }
        }
        //当循环结束之后,表示我们已经找到了,在2 ~ number-1 这个范围之内,有多少个数字能被number整除
        if(count == 0){
            System.out.println(number + "是一个质数");
        }else{
            System.out.println(number + "不是一个质数");
        }
    }
}

以上几个代码是初学者比较难啃的几个编程思维,不懂得要好好琢磨。慢慢就懂了。

2. Random

Random产生随机数(掌握)

  • 概述:

    • Random类似Scanner,也是Java提供好的API,内部提供了产生随机数的功能

      • API后续课程详细讲解,现在可以简单理解为Java已经写好的代码

  • 使用步骤:

    1. 导入包

      import java.util.Random;

    2. 创建对象

      Random r = new Random();

    3. 产生随机数

      int num = r.nextInt(10);

      解释: 10代表的是一个范围,如果括号写10,产生的随机数就是0-9,括号写20,参数的随机数则是0-19

      扩展点:如果第三步没有指定范围,那么会在int的取值范围中获取一个随机数。

  • 示例代码:

import java.util.Random;
public class RandomDemo {
    public static void main(String[] args) {
        //创建对象
        Random r = new Random();
        //用循环获取10个随机数
        for(int i=0; i<10; i++) {
            //获取随机数
            int number = r.nextInt(10);
            System.out.println("number:" + number);
        }
        //需求:获取一个1-100之间的随机数
        int x = r.nextInt(100) + 1;//仔细思考为什么这样写?很精妙
        System.out.println(x);
    }
}

Random练习-猜数字小游戏

  • 需求:

    程序自动生成一个1-100之间的数字,使用程序实现猜出这个数字是多少?

    当猜错的时候根据不同情况给出相应的提示

    A. 如果猜的数字比真实数字大,提示你猜的数据大了

    B. 如果猜的数字比真实数字小,提示你猜的数据小了

    C. 如果猜的数字与真实数字相等,提示恭喜你猜中了

  • 示例代码:

import java.util.Random;
import java.util.Scanner;
​
public class RandomTest {
    public static void main(String[] args) {
        //要完成猜数字的游戏,首先需要有一个要猜的数字,使用随机数生成该数字,范围1到100
        Random r = new Random();
        int number = r.nextInt(100) + 1;
        
        while(true) {
            //使用程序实现猜数字,每次均要输入猜测的数字值,需要使用键盘录入实现
            Scanner sc = new Scanner(System.in);
            
            System.out.println("请输入你要猜的数字:");
            int guessNumber = sc.nextInt();
            
            //比较输入的数字和系统产生的数据,需要使用分支语句。
             //这里使用if..else..if..格式,根据不同情况进行猜测结果显示
            if(guessNumber > number) {
                System.out.println("你猜的数字" + guessNumber + "大了");
            } else if(guessNumber < number) {
                System.out.println("你猜的数字" + guessNumber + "小了");
            } else {
                System.out.println("恭喜你猜中了");
                break;
            }
        }
        
    }
}

运行如下:

 

猜数字小游戏扩展1:(掌握)

生成随机数的代码不能写在循环里面。

否则,每猜一次,都会产生一个新的随机数。

猜数字小游戏扩展2:(了解)

很多游戏中,都会有保底机制。

假设,在猜数字小游戏中,三次猜不中就触发保底机制

代码示例:

import java.util.Random;
import java.util.Scanner;
​
public class RandomDemo2 {
    public static void main(String[] args) {
        //分析:
        //1.生成一个1-100之间的随机数字
        Random r = new Random();
        //扩展1:生成随机数的代码,不能写在循环里面,否则每一次都会生成一个新的随机数
        //扩展2:保底机制3次
        
        //定义变量记录猜的次数
        int count = 0;
        int number = r.nextInt(100) + 1;
        System.out.println(number);
        
        //2.使用键盘录入的方式去猜
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请输入你要猜的数字");
            int guessNumber = sc.nextInt();
            
            
            //每猜一次,count就++
            count++;
            //判断当前是第几次
            //如果达到了保底,直接提示猜中了
            if(count == 3){
                System.out.println("猜中了");
                break;
            }
           
            
            //3.拿着键盘输入的数字 跟 随机数比较判断
            if (guessNumber > number) {
                System.out.println("大了");
            } else if (guessNumber < number) {
                System.out.println("小了");
            } else {
                System.out.println("猜中了");
                break;
            }
        }
​
    }
}​

注意: 这里回顾以下,之前在第二天讲的idea有一个设置是自动导包设置,不知道大家还有没有印象,这里就用到了,我们在写代码

 Random r = new Random();

 的时候,可能你不知道这个类在哪个包,但是我们设置了自动导包,因此文件头部会自动给我们填充上

import java.util.Random;

 这就是自动导包设置的好处。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值