美文网首页
流程控制语句

流程控制语句

作者: 小疏林er | 来源:发表于2020-07-22 20:54 被阅读0次

    循环控制语句

    1. for:自带计数器的操作(适合已知次数的循环)

    • 结构:
    for(初始化(1); 布尔表达式(1); 更新(4)) {
        //循环体(3)
    }
    
    • 注:
      i. 按照1、2、3、4的顺序执行,并且1只执行一次。
      ii.1、2、3、4皆可省略且不报错for(;;);,写在他后面的代码不可达。
      iii.1、2、4可对多个变量进行操作,但初始化的变量只能是同一类型。
      栗子:for (int i=0,j=0;i<7&&j<8;i++,j++)

    2. while:事前判断+事后判断 (当型,适合未知次数的循环)

    • 结构:
    while( 布尔表达式 ) {
    //循环内容
    }
    
    • 注:使用while循环时,尽量保证循环条件有false到时候,否则循环就成了死循环。
    • 考:求100以内可被3整除的数的和。
    public int sum3_while() {
          int sum = 0,i = 0;
          while(i<=100) {
              if(i%3==0) {
                  sum+=i;
              }
              i++;
          }
          return sum;
    }
    
    • 考:猴子第一天摘下若千个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
    public int re_tao() {
          int day=10;
          int tao=1 ;
          while(day>1) {
              tao = (tao+1)*2;
              day--;
          }
          return tao;
      }
    

    3. do while:直到型(无论循环条件是否成立,do中循环体都会执行一次)

    • 结构:
    do {
          //循环体
    }while(布尔表达式);
    

    4. for、while、do while转换

    //for循环
    public int sum3_for() {
          int sum = 0;
          for(int i=0;i<=100;i++) {
              if(i%3==0) {
                  sum+=i;
              }
          }
          return sum;
    }
    //while
    public int sum3_while() {
          int sum = 0,i = 1;
          while(i<=100) {
              if(i%3==0) {
                  sum+=i;
              }
              i++;
          }
          return sum;
    }
    //do while
    public int sum3_do() {
          int sum = 0,i = 0;
          do {
              if(i%3==0) {
                  sum+=i;
              }
              i++;
          }while(i<=100);
          return sum;
    }
    

    条件控制语句

    1. if:事前判断

    • 结构:
    if(布尔表达式){
       //如果布尔表达式为true将执行的语句
    }
    //双分支使用
    if(布尔表达式){
        //如果布尔表达式的值为true则执行这里的代码
    }else{
        //如果布尔表达式的值为false则执行这里的代码
    }
    //嵌套使用
    if(布尔表达式 1){
        //如果布尔表达式 1的值为true执行代码
    }else if(布尔表达式 2){
        //如果布尔表达式 2的值为true执行代码
    }else if(布尔表达式 3){
        //如果布尔表达式 3的值为true执行代码
    }else {
        //如果以上布尔表达式都不为true执行代码
    }
    

    考:

    class Example {
     public static void main(String args[]){
       boolean flag = false;
       if (flag = true){ 
           System.out.println("true");
        }else{
           System.out.println("false");
        }
      }
    }
    

    答案:打印输出:true,仅限布尔变量的赋值。

    switch case:判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。

    • 结构:
    switch(变量或表达式){
      case 值1 :
          可执行语句;
          break;
      case 值2 :
          可执行语句;
          break;
      
      defult :
          可执行语句;
          break;
    }
    
    • 关于成绩的栗子
    public String re_grade_rank(int grade) {
          String rank ;
          if(grade<=100&&grade>=0) {
              switch (grade/10) {
              case 10:
              case 9:
                  rank = "A";
                  break;
              case 8:
                  rank = "B";
                  break;
              case 7:
                  rank = "C";
                  break;
              case 6:
                  rank = "D";
                  break;
              default :
                  rank = "E";
                  break;
              }
          }else {
              rank = "请输入0-100的成绩!";
          }
          return rank;
    }
    
    • 效率高,逻辑简单,但是毕竟死板。

    跳出关键字

    • continue:跳过本次循环。
    • break:break跳出离他最近的循环块或switch(跳过本轮循环)。
    • return:结束当前函数。
    • 栗子
    for(int i=0;i<5;i++) {
      if(i==3) {
          break;
      }
      System.out.println(i);
    }
    //0    1   2
    for(int i=0;i<5;i++) {
      if(i==3) {
          break;
      }
      System.out.println(i);
    }
    //0    1   2   3   4
    

    练习题

    1. 输入一个数字,判断是一个奇数还是偶数(知识点:条件语句)
    public String re_jiou(int a) {
            String temp=null;
            if(a%2==0) {
                temp = "偶数";
            }else {
                temp = "奇数";
            }
            return temp;
        }
    
    1. 输入一个年份,判断这个年份是否是闰年(知识点:条件、循环语句)[必做题]
    public String runian(int a) {
            String temp=null ;
            if(a%4==0&&a%100!=0) {
                temp = "闰年!";
            }else {
                temp = "非闰年!";
            }
            return temp;
        }
    
    1. 编写一个程序,找出大于200的最小的质数[选做题]
    public void re_zhishu(int temp) {
            int j;
            for (int i = temp;i <= 1000; i++) // 1不是素数bai,所以直接du从2开始循环
            {
                j = 2;
                while (i % j != 0) {
                    j++; // 测试2至i的数字是zhi否能被i整除,dao如不能就自加
                }
                if (j == i) {
                    System.out.println(i); // 如果是就打印出数字
                    return;
                }
            }
        }
    
    1. 打印出所有的”水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
      例如:153是一个”水仙花数",因为153=1的三次方+5的三次方+3的三次方
      程序分析: 利用for循环控制100-999个数,每个数分解出个位,十位,百位。
    public void test3(int a) {
            int sum = 0;
            int i=1;
            for(;i<=a;i++) {
                int j=i;
                while(j!=0) {
                    sum+=((j%10)*(j%10)*(j%10));
                    j/=10;
                }
                if(i==sum) {
                    System.out.println(i);
                }
                sum = 0;
            }
        }
    
    1. 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
    public static void test6(int m,int n) {
            int maxGys = 0;
            int minGbs = 0;
            for(int i=1;i<=(m>n?m:n);i++) {
                if(m%i==0&&n%i==0) {
                    maxGys = i;
                }
            }
            for(int j=(m>n?m:n);j>0;j++) {
                if(j%m==0&&j%n==0) {
                    minGbs = j;
                    break;
                }
            }
            System.out.println("最大公约数是:"+maxGys+",最小公倍数是:"+minGbs);
        }
    
    1. 题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
    public void test_9() {
            int sum ;
            for(int i=1; i<=1000; i++) {
                sum = 0;
                for(int j=1; j<i ;j++) {
                    if(i%j==0) {
                        sum +=j;
                    }
                }
                if(i==sum) {
                    System.out.println(i+"是一个非常完美的数啊!");
                }
            }
    }
    
    1. 有一分数序列:2/1, 3/2, 5/3, 8/5, 13/8, 21/13...求出这个数列的前20项之和。
    public void test_20() {
            double sum = 0;
            double [] zi = new double[20];
            double [] mu = new double[20];
            zi[0] = 2;
            zi[1] = 3;
            mu[0] = 1;
            mu[1] = 2;
            for (int i = 2; i < 20; i++) {
                zi[i] = zi[i-1]+zi[i-2];
                mu[i] = mu[i-1]+mu[i-2];
            }
            for (int i = 0; i < 10; i++) {
                sum+=zi[i]/mu[i];
            }
            System.out.println(sum);
        }
    
    1. 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n.
    public void test_39(int a) {
            double sum = 0;
            if(a%2==0) {
                for (int i = 1; i <=(int)a*0.5+1 ; i++) {
                    sum+=1.0/(i*2);
                }
            }else {
                for (int i = 1; i <=(int)(a+1)*0.5 ; i++) {
                    sum += 1.0/((i*2)-1);
                }
            }
            System.out.println(sum);
        }
    
    1. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的。
      加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
    public void test_48(int a) {
            int []b = new int[4];
            int temp;
            for (int i = 0; i < 4; i++) {
                b[i]=(a%10)+5%10;
                a/=10;
            }
            for (int i = 0; i < b.length/2; i++) {
                temp = b[i];
                b[i] = b[b.length-i-1];
                b[b.length-i-1] = temp;
            }
            for (int i : b) {
                System.out.println(i);
            }
        }
    
    1. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
      程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21。(斐波那契数列)
    public void test1(int a) {
            int tu1 = 1;
            int tu2 = 1;
            int tu = 0;
            for(int i=1;i<a;i++) {
                if(i<3) {
                    System.out.println(tu1);
                }else {
                    tu = tu1+tu2;
                    tu1 = tu2;
                    tu2 = tu;
                    System.out.println(tu);
                }
            }
        }
    

    相关文章

      网友评论

          本文标题:流程控制语句

          本文链接:https://www.haomeiwen.com/subject/jlobkktx.html