流程控制语句

循环控制语句

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);
            }
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352