循环高级综合练习


无限循环和跳转控制语句

无限循环

  • 无限循环:循环一直停不下来。

格式:

for:

for(;;){
    System.out.println("给女神表白");
}

while:

while(true){
    System.out.println("女神答应我了");
}

do...while:

do{
    System.out.println("女神答应我了");
}while(true);

注意事项

  • 无限循环的下面不能再写其它代码了,因为循环永远停不下来,那么下面的代码永远执行不到。

跳转控制语句

  • 跳转控制语句:在循环的过程中,跳到其他语句上执行。

练习

案例1:小老虎吃包子

小老虎吃包子,第三个包子有虫子,跳过。

public class SkipLoopDemo1 {
    public static void main(String[] args) {
        //1.跳过某一次循环
        for (int i = 1; i <= 5; i++) {
            if(i == 3){
                //结束本次循环,继续下次循环。
                continue;
            }
            System.out.println("小老虎在吃第" + i + "个包子");
        }
    }
}

案例2:小老虎吃包子

小老虎吃包子,吃完第三个就饱了。

public class SkipLoopDemo2 {
    public static void main(String[] args) {
        //2.结束整个循环
        for (int i = 1; i <= 5; i++) {
            System.out.println("小老虎在吃第" + i + "个包子");
            if(i == 3){
                //结束整个循环
                break;
            }
        }
    }
}

总结:

  1. continue:跳过本次循环,继续执行下次循环。
  2. break:结束整个循环。

练习(4.随机数)

案例1:逢7过

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

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

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

public class LoopTest1 {
    public static void main(String[] args) {
        /*朋友聚会的时候可能会玩一个游戏: 逢7过
        游戏规则:从任意一个数字开始报数,当你要报的数字是包含7或者是7的倍数时都要说:过
        需求:使用程序在控制台打印出1-100之间的满足逢七必过规则的数据
         */

        //分析:
        //个位7  十位7  7倍数

        //1.得到1~100之间的每一个数字
        //开始:1
        //结束:100
        for (int i = 1; i <= 100; i++) {
        //2.判断每一个数字,如果符合规则,就打印过,如果不符合规则就打印真实的数字
            if(i % 10 == 7 || i / 10 % 10 == 7 || i / 7 == 0){
                System.out.println("过");
                continue;
            }
            System.out.println(i);
        }
    }
}

案例2:求平方根

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

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

import java.util.Scanner;

public class LoopTest2 {
    public static void main(String[] args) {
        /*需求:键盘录入一个大于等于2的整数x,计算并返回x的平方根。
        结果只保留整数部分,小数部分将被舍去。
         */

        //分析:
        //1.键盘录入一个整数
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数");
        int number = sc.nextInt();
        //2.从1开始循环判断
        //开始:1 结束:number
        for (int i = 1; i <= number; i++) {
            //用i * i 再跟number进行比较
            if(i * i == number){
                System.out.println(i + "就是" + number + "的平方根");
                //一旦找到了,循环就可以停止了,后面的数字就不需要再找了,提高代码的运行效率。
                break;
            }else if(i * i > number){
                System.out.println((i - 1) + "就是" + number + "平方根的整数部分");
                break;
            }
        }
    }
}

案例3:求质数

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

基础思路:

import java.util.Scanner;

public class LoopTest3 {
    public static void main(String[] args) {
        //需求:键盘录入一个正整数x,判断该整数是否为一个质数。

        //1.键盘录入一个正整数
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个正整数");
        int number = sc.nextInt();

        //定义一个变量,表示标记
        //标记着number是一个质数
        //true:是一个质数
        //false:不是一个质数
        boolean flag = true;

        //2.判断
        //写一个循环,从2开始判断,一直判断到number-1为止
        //看这个范围之内,有没有数字可以被number整除
        for (int i = 2; i < number; i++) {
            //i 依次表示这个范围之内的每一个数字
            //看number是否能被i整除
            if(number % i == 0){
                flag = false;
                break;
            }
        }
        //只有当循环结束了,表示这个范围之内所有的数字都判断完毕了
        //此时才能断定number是一个质数
        if(flag){
            System.out.println(number + "是一个质数");
        }else{
            System.out.println(number + "不是一个质数");
        }
    }
}

简化思路(用于提高程序的运行效率):

import java.util.Scanner;

public class LoopTest4 {
    public static void main(String[] args) {

        //思路:
        //81
        //1*81
        //3*27
        //9*9
        
        //以81的平方根9,为中心
        //假设a * b = 81
        //那么a和b中,其中有一个必定是小于等于9的
        //另一个是大于等于9的
        
        //假设,都是大于9 --- 9.1 * 9.1 > 81
        //假设,都是小于9 --- 8.9 * 8.9 < 81
        //其中一个数字一定是小于等于平方根
        //另一个数字一定大于等于平方根
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数");
        int number = sc.nextInt();
        boolean flag = true;
        for (int i = 1; i <= number; i++) {
            if(i * i >= number){
                for(int a = 2; a <= i;a++){
                    if(number % a == 0){
                        flag = false;
                        break;
                    }
                }
                if(flag){
                    System.out.println(number + "是一个质数");
                }else{
                    System.out.println(number + "不是一个质数");
                }
                break;
            }
        }
    }
}

案例4:猜数字小游戏

  • 获取随机数:Java帮我们写好一个类叫Random,这个类就可以生成一个随机数。

  • 使用步骤:

    1. 导包 --- Random这个类在哪

      import java.util.Random;
      //导包的动作必须出现在类定义的上边。
      
    2. 创建对象 --- 表示我要开始用Random这个类了

      Random r = new Random ();
      //上面这个格式里面,只有r是变量名,可以变,其他的都不允许变。
      
    3. 生成随机数 --- 真正开始干活

      int number = r.nextInt(随机数范围);
      //上面这个格式里面,只有number是变量名,可以变,其他的都不允许变。
      

    范例1:

    import java.util.Random;
    
    public class LoopTest5 {
        public static void main(String[] args) {
            //先获取一个随机数。
            //范围:0~100
    
            //1.导包
            //2.创建对象
            Random r = new Random();
    
            //3.生成随机数
            //判断技巧:
            //在小括号中,书写的是生成随机数的范围
            //这个范围一定是从0开始的
            //到这个数-1结束
            //口诀:包头不包尾,包左不包右
            int number = r.nextInt(100);//0 ~99
    
            System.out.println(number);
        }
    }
    

    范例2:

    import java.util.Random;
    
    public class LoopTest6 {
        public static void main(String[] args) {
            //需求:
            //随机数范围:1-100
            //方法1.
            Random r = new Random();
            int number1 = r.nextInt(1,101);//1~100
            System.out.println(number1);
    
            //方法2:
            //1.让这个范围头尾都减去一个值,让这个范围从0开始
            //2.尾巴+1
            //3.最终的结果,再加上第一步减去的值
            int number2 = r.nextInt(100) + 1;
            System.out.println(number2);
        }
    }
    

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

import java.util.Random;
import java.util.Scanner;

public class LoopTest7 {
    public static void main(String[] args) {
        //需求:程序自动生成一个1-100之间的随机数字,使用程序实现猜出这个数字是多少?

        //扩展需求:加一个保底机制,10次猜不中,直接显示失败

        //注意事项:
        //1.生成随机数的代码int number = r.nextInt(1,101);
        //不能写在循环的里面,否则每一次都会产生一个新的随机数

        //2.抽奖机制
        //保底 xx次

        //计数器
        //用来统计当前已经猜了多少次
        int count = 0;
        //分析:
        //1.生成一个1-100之间的随机数字
        Random r = new Random();
        int number = r.nextInt(1,101);
        //2.猜这个数字是多少
        Scanner sc = new Scanner(System.in);
        while (true){
            System.out.println("请输入你要猜的数字");
            int guessNumber = sc.nextInt();
            //3.判断两个数字给出不同的提示
            //猜的数字大了,提示 大了
            //猜的数字笑了,提示 小了
            //猜的数字一样,提示 猜中了
            count++;
            if(count == 10){
                System.out.println("游戏失败");
                break;
            }
            if(guessNumber > number){
                System.out.println("大了");
            }else if(guessNumber < number){
                System.out.println("小了");
            }else{
                System.out.println("猜中了");
                break;
            }
        }
    }
}