流程控制语句

循环控制语句

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
  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

你可能感兴趣的:(流程控制语句)