zoukankan      html  css  js  c++  java
  • 0004day04_15循环结构-循环嵌套、break和continue与标签随机数的另外一种方式 break、continue、求最大公约数、循环嵌套、求水仙花数 out标签等

    流程控制语句结构:
    1、顺序结构:从上往下,没什么好说的
    2、分支结构  if else   switch...case
    3、循环结构:重复执行某些代码时

    循环结构
    1、for循环
    2、while循环
    3、do...while循环
    4、foreach增强循环(后面再讲)*/

    语法

    1、语法结构
    形式一:
    for(;;){
    需要重复执行的语句(换句话说,不需要重复执行的语句,就不要放到{}中
    }
    形式二:
    for(循环变量初始化表达式①; 循环条件表达式②; 循环变量迭代表达式③){
    循环体语句④:需要重复执行的语句
    }

    实例,如果我们写一个死循环怎么写?

    //【注意】这是错误的写法,不符合语法
    /*
    for(1>0){
    System.out.println("你真厉害");
    }

    //正确写法如下
    for(;;){
    System.out.println("你真厉害");
    }

    猜一猜

    练习:用for循环求1-100的和

     练习:用for循环求1-100的和

    错误写法:

     因为0不是偶数,没必要从0开始

    正确写法

    //---------------------------------------------------------------------
    /*
    (二)while循环
    语法格式:
    while(循环条件){
    循环体语句块
    }
    执行过程:
    (1)先判断循环条件
    (2)如果循环条件成立,那么就执行循环体语句,再回到(1)
    如果循环条件不成立,那么就结束while循环

    仔细分析,仍然有四个要素:
    (1)循环变量的初始化,例如:int i = 1;
    (2)循环条件,例如:i<=100
    (3)循环体语句,例如: sum+=i;
    (4)迭代语句,例如:i++
    结论:
    各种循环之间是可以互相替换的,只不过,在某些场景,那么某一中循环更合适(可读性方面)
    for循环一般用于:次数比较明显,以及后面数组等遍历
    while循环一般用于:条件比较明显,次数不太明显*/
    //实例1、求1-100的和
    int i=1;
    int sum=0;
    while(i<=100){
    sum+=i;
    i++;
    }
    System.out.println(sum);

     

     

    //----------------------------------------------------------------
    //do...while 循环
    /*
    语法结构:
    do{
    循环体语句块:需要重复的代码
    }while(循环条件);
    */
    /*
    执行过程:
    (1)先执行一次循环体语句块
    (2)然后再判断条件,看是否继续下一次
    (3)如果条件成立,再次执行循环体语句块;然后回到(2)
    如果条件不成立,直接结束do...while

    do...while循环与for和while的最大区别:它的循环体语句块是至少执行一次。
    */

    //练习
    /*
    随机生成一个100以内的整数,猜数字游戏
    从键盘输入数,如果大了提示,大了,如果小了,提示小了,如果对了,就不再猜了,
    并统计一共猜了多少次*/
    int randNum=(int)(Math.random()*100);//0-100之间 默认是0-1 所以乘以100,转成int是为了去掉小数
    //做法,普通生成随机数的方式
    java.util.Scanner input=new java.util.Scanner(System.in);
    int num;//挪到do() 上面 ,提升作用域
    int count=0; //统计次数
    do{
    System.out.println("猜数(范围[0,100])");
    num=input.nextInt();
    count++;//输入一次,就代表猜了一次
    if(num>randNum){
    System.out.println("大了");
    }else if(num<randNum){
    System.out.println("小了");
    }else{
    System.out.println("猜对了");
    }

    }while(num!=randNum);//没有猜对,就一直猜
    System.out.println("一共猜了:"+count+"次, "+"随机数是"+randNum);

    ---------------------------------------------------------------------

    另外一种生成随机数的方式  这一种更容易理解

    在Java的核心类库中,除了在Math类中提供了random()来产生随机数,
    还在java.util.Random类中也提供产生随机数的方法。

    //实例
    //准备工具
    java.util.Random tools=new java.util.Random();
    //用工具获取随机数
    int num=tools.nextInt();
    System.out.println("随机整数:"+num);

    double d=tools.nextDouble();
    System.out.println("随机小数:"+d);

    //用工具获取一定范围内的随机数值
    int rangeNum=tools.nextInt(10); //表示[0,10]
    System.out.println("随[0,10]的整数:"+rangeNum);

    //---break-----------------------------------------------
    /*
    break:
    (1)用于switch..case
    作用:结束switch
    (2)用于循环结构
    作用:结束当前循环
    结论:结束一个循环有两种情况(1)循环条件不满足(2)遇到了break等中断
    */
    //实例:从键盘输入整数,输入0结束,统计输入的正数、负数的个数。
    //做法
    //获取键盘输入
    java.util.Scanner input=new java.util.Scanner(System.in);
    int zhengshu=0;
    int fushu=0;
    while(true){
    System.out.println("请输入整数,输入0结束,我们将统计输入的正数、负数的个数");
    int userInput=input.nextInt();
    if(userInput>0){
    zhengshu++;
    }else if(userInput<0){
    fushu++;
    }else{
    break;//退出while循环
    }
    }
    System.out.println("您输入的正数一共有"+zhengshu+"个 "+"您输入的正数一共有"+fushu+"个 ");

    //---------------------------------------------------------------------------------------------

    continue:继续
    只能用于循环结构
    作用:提前结束本次循环,继续下一次循环
    */
    //实例 打印 1-100的偶数
    for(int i=1;i<=100;i++){
    if(i%2!=0){
    continue;
    }
    System.out.println(i);
    }

    /*
    7、输入两个正整数m和n,求其最大公约数和最小公倍数
    */
    class Test14_Exer7{
    public static void main(String[] args){
    //输入两个正整数m和n
    java.util.Scanner input = new java.util.Scanner(System.in);

    int m;
    while(true){
    System.out.print("请输入第一个正整数m的值:");
    m = input.nextInt();
    if(m<=0){
    System.out.println(m + "不是正整数,请重写输入!");
    }else{
    break;
    }
    }
    int n;
    while(true){
    System.out.print("请输入第一个正整数n的值:");
    n = input.nextInt();
    if(n<=0){
    System.out.println(n + "不是正整数,请重写输入!");
    }else{
    break;
    }
    }

    System.out.println("两个正整数:" + m + "," + n);
    -值得细品的练习--------------------------------------------------------------------------------------------
    //求m和n的最大公约数和最小公倍数
    /*
    1、概念
    公约数:能够把m和n都整除,就是它俩的公约数
    例如:6和9,公约数:1,3
    9和18,公约数:1,3,9
    5和13,公约数:1
    公倍数:能够被m和n都整除的,就是它俩的公倍数
    例如:6和9,公倍数:18,36....
    9和18,公倍数:18,36...
    5和13,公倍数:65,....

    2、如何找最大公约数
    例如:6和9
    从6开始,9%6==0? 6%6==0?
    9%5==0? 6%5==0?
    9%4==0? 6%4==0?
    9%3==0? 6%3==0? binggou找到了 结束查找
    例如:9和18
    从9开始 9%9==0? 18%9==0? binggou找到了 结束查找
    例如:5和13
    从5开始 5%5==? 13%5==0?
    5%4==? 13%4==0?
    5%3==? 13%3==0?
    5%2==? 13%2==0?
    5%1==? 13%1==0? binggou找到了 结束查找
    其实只要找到5的平方根就可以了
    */

    //第一步:找出m和n中最大值和最小值
    int max = m>=n ? m : n;
    int min = m<n ? m : n;

    //第二步:从小的开始查找
    //这里的1也可以修改为min的平方根
    int maxYue = 1;
    for(int i=min; i>=1; i--){.........................
    //看i是否能够同时把m和n都整除
    if(m%i==0 && n%i==0){
    maxYue = i;
    break;
    }
    }
    System.out.println(maxYue +"是" + m + "和" + n + "的最大公约数");

    //最小公倍数 = m*n / 最大公约数
    //System.out.println(m*n/maxYue +"是" + m + "和" + n + "的最小公倍数");

    //如果不知道这个公式
    //从max开始找,一直找到m*n
    for(int i=max; i<=m*n; i++){
    if(i%m==0 && i%n==0){
    System.out.println(i +"是" + m + "和" + n + "的最小公倍数");
    break;

    //Test15_NestLoop循环嵌套------------------------------------------------------------------
    /*
    循环的嵌套:
    执行过程:外循环循环一次,内循环整个循环一轮
    例如:
    *****
    *****
    *****
    *****
    */
    //分析(1)连续打印5颗*(2)换行
    for(int i=0;i<4;i++){
    for(int j=0;j<5;j++){
    System.out.print("*");
    }
    System.out.println();
    }
    System.out.print("*");

    --------------------------------------------------------------------

    循环嵌套:
    5、输出所有的水仙花数,所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身。
    例如: 153 = 1*1*1 + 5*5*5 + 3*3*3
    */
    //分析
    //所谓水仙花数是指一个3位数==>[100,999]
    //百位:1-9
    //十位:0-9
    //个位:0-9
    /*
    当bai=1, shi会从0变到9整个来一轮
    当shi=0,ge会从0变到9整个来一轮
    */
    for(int bai=1;bai<=9;bai++){
    for(int shi=0;shi<=9;shi++){
    for(int ge=0;ge<=9;ge++){
    if(ge*ge*ge+shi*shi*shi+bai*bai*bai==bai*100+shi*10+ge){
    System.out.println(bai*100+shi*10+ge);

    //--------------------------------------------------------------------------
    //out就是标签名称,和变量名一样命名规则,规范
    //标签名后面加:
    //out是个标号。是指break时候跳出当前循环并跳出标号所指的循环
    for(int i=1;i<=5;i++){
    out:for(int j=1;j<=5;j++){
    System.out.print("* ");
    if(i==j){
    break out;
    }
    }
    System.out.println();
    }

     


    }
    }

  • 相关阅读:
    eclipse 添加.gitignore
    HTTP method POST is not supported by this URL
    Nodejs 如何解决每次向后台发起请求时判断用户是否处于登录状态?
    Servlet 全局验证是否登录
    会员管理系统的设计和开发(1)
    C程序模拟实现银行家算法
    XPath Helper:chrome爬虫网页解析工具 Chrome插件
    scrapy爬虫出现Forbidden by robots.txt
    廖雪峰
    Nodejs中export的作用
  • 原文地址:https://www.cnblogs.com/liliang07/p/13252393.html
Copyright © 2011-2022 走看看