美文网首页
第3章 流程控制语句(12课时)

第3章 流程控制语句(12课时)

作者: wqjcarnation | 来源:发表于2020-01-03 08:43 被阅读0次

    本章目标

    1)分支语句
    if-else if-else
    switch

    2)循环语句
    for
    while
    do while

    一、if
    1)最简单的if
    if(判断条件){
    条件为真执行的语句块
    }

    例子
    @Test
    public void test3(){
    //在控制一行提示

    System.out.println("请输入一个整型的学员成绩");

    //接受键盘输入
    Scanner sc=new Scanner(System.in);
    //得到学生成绩
    int score=sc.nextInt();
    //输出学生成绩
    System.out.println("您输入的是:"+score);
    //定义一个变量,用于将来存储等级
    char grade = 0 ;
    //根据学员的分数转化成对应的等级
    //如果分数>=85 那么他的等级为you
    if(score>=85){
    //执行语句todo
    grade='优';
    }
    System.out.println("您此次考试的等级为"+grade);
    //如果分数>=70 <85 良
    //如果分数>60 <70 中
    //如果分数=60 及格
    //如果<60 不及格
    }

    带一个else的情况
    if(条件满足){
    执行满足时的语句块
    }else{
    如果不满足就执行这里的语句块
    }

    if(score>=85){
    //执行语句todo
    grade='优';
    }else{//其他情况
    grade='否';
    }

    更复杂一些的

    if(score>=85){
    //执行语句todo
    grade='优';
    }else if(score>=70){//如果分数>=70,良
    grade='良';
    }else if(score>60){//如果分数>60
    grade='中';

    }

    System.out.println("您此次考试的等级为"+grade);

    练习 :学生补全其他逻辑

    //如果分数=60 及

    //如果<60 差

    课堂练习:闰年

    @Test

    public void test2(){
    

    int year=2064;

    if(year%400==0){//能被400整除的是闰年

    System.out.println("是闰年");

    }else if(year%4==0&&year%100!=0){//能被4整除,不能被100整除的是闰年

    System.out.println("是闰年");

    }else{//其他不是闰年

    System.out.println("不是闰年");

    }

    }

    二、switch 语句
    @Test

    public void test(){

    //switch case default

    switch表达式支持的类型char byte short int jdk1.7之后支持字符串

    char c='e';

    switch(c){

    case 'a':

    System.out.println("你选择了a");

    break;

    case 'b':

    System.out.println("你选择了b");

    break;

    case 'c':

    System.out.println("你选择了c");

    break;

    case 'd':

    System.out.println("你选择了d");

    break;

    default:

    System.out.println("哥们,你选错了");

    break;
    

    }

    }

    case语句块遇到break会跳出,如果第一个选项break没有写,会顺序向下执行,直到遇到break为止

    switch语句特点:
    表达式的值只可以接受int、byte、char、short 、String型,不接受其他类型的值

    表达式的值接受String类型只在JDK7及以后版本有效

    switch case中的值必须要与switch表达式的值具有相同的数据类型。而且case后跟的值必须是常量,不能跟变量。

    不允许有重复的case取值

    switch一旦碰到第一次case匹配,程序就会跳转到这个标签位置,开始顺序执行以后所有的程序代码,而不管后面的case条件是否匹配,直到碰到break关键字或者结束switch语句的大括号为止

    case之间与default没有顺序。先判断所有的case,没有匹配的case执行default。因此一般将default放在case后面。

    switch语句停止的条件是遇到了break关键字或者结束switch语句的大括号。

    课堂练习:
    如果月份month为1—12的一个月份,输出该月份的天数;如果数字不符合,输出“错误的月份”。

    1、3、5、7、8、10、12月天数为31

    2月天数为28

    4、6、9、11月天数为30

    使用switch语句完成需求

    传统方式

    @Test

    public void test09()

    {

    System.out.println("yuefen:");

    Scanner sc=new Scanner(System.in);

    int i=sc.nextInt();

    switch (i) {

    case 1:

    System.out.println("31");

    break;

    case 2 :

    System.out.println("28");

    break;

    case 3 :

    System.out.println("31");

    break;

    case 4 :

    System.out.println("30");

    break;

    case 5 :

    System.out.println("31");

    break;

    case 6 :

    System.out.println("30");

    break;

    case 7 :

    System.out.println("31");

    break;

    case 8 :

    System.out.println("31");

    break;

    case 9 :

    System.out.println("30");

    break;

    case 10 :

    System.out.println("31");

    break;

    case 11 :

    System.out.println("30");

    break;

    case 12 :

    System.out.println("31");

    break;

    default:

    System.out.println("错误的月份");

    break;

    }

    }

    简化方式:

    @Test

    public void test11()

    {

    System.out.println("yuefen:");

    Scanner sc=new Scanner(System.in);

    int i=sc.nextInt();

    switch (i) {

    case 1:

    case 3:

    case 5:

    case 7 :

    case 8 :

    case 10 :

    case 12 :

    System.out.println("31");

    break;

    case 2 :

    System.out.println("28");

    break;

    case 4 :

    case 6 :

    case 9 :

    case 11 :

    System.out.println("30");

    break;

    default:

    System.out.println("错误的月份");

    break;

    }

    }

    String 类型(字符串)
    String s="测试代码";

    可以用+连接多个字符串

    next nextLine区别:next()遇到空格即结束,nextLine() 可以接受一整行输入,中间可以有空格,直到你回车他才认为是结束

    @Test

    public void test3() {

    // switch case default

    // switch表达式支持的类型char byte short int jdk1.7之后支持字符串

    System.out.println("请输入一个字符串");

    //接受键盘输入

    Scanner sc=new Scanner(System.in);

    //获取键盘输入的值

    String s=sc.next();

    System.out.println(s);

    }

    @Test

    public void test4() {

    // switch case default

    // switch表达式支持的类型char byte short int jdk1.7之后支持字符串

    System.out.println("请输入一个字符串");

    //接受键盘输入

    Scanner sc=new Scanner(System.in);

    //获取键盘输入的值

    String s=sc.nextLine();

    System.out.println(s);

    }

    作业:

    第3章课后习题必做题1-9

    生成随机数
    int i=new Random().nextInt(10);

    System.out.println(i);

    @Test

    public void randomTest(){

    //0-9

    System.out.println(new Random().nextInt(10));

    //1+(0-10)

    System.out.println(1+new Random().nextInt(10-1+1));

    //10-20

    //(数据类型)(最小值+Math.random()*(最大值-最小值+1))

    System.out.println(10+new Random().nextInt(20-10+1));

    }

    循环语句
    for

    while

    do while

    while 语法:

    while(条件表达式){

    执行语句块;

    }

    简单例子:

    @Test

    public void test1(){

    int i=0;

    while(i<=3){

    i++;

    System.out.println(i);

    }

    }

    学生练习:

    输出1-100之间的偶数

    第3章 39页的2题

    @Test

    public void test2(){

    //计算1-100之间的和

    //做一个计数器count

    int count=0;

    int i=1;

    //循环1-100之间的数

    //每循环到一个数,把他加到count里

    while(i<=100){

    //count=count+i;

    count+=i;

    i++;

    }

    System.out.println(count);

    }

    //1-100之间的数,打印数里含7或者可以被7整除的
    @Test
    public void test06(){
    int i=1;
    while(i<=100){
    if(i%7==0||i%10==7||i/10%10==7){
    System.out.println(i);
    }

    i++;

    }

    }

    do...while
    do{

    执行语句块

    }while(条件表达式);

    两者区别:do...while无论如何都会执行一次。

    代码如下:

    @Test
    public void liHanfeng(){
    int i=3;
    while(i<3){
    System.out.println("i="+i);
    }

    }

    @Test

    public void wangJy(){

    int i=3;

    do{

    System.out.println("i="+i);

    }

    while(i<3);

    }

    课堂练习:

    用do...while 计算1-100之间的奇数和

    作业:
    第3章 31页的2道练习

    第3章 39页的第3题

    课后习题1-8

    for循环
    for(初始化循环变量;条件表达式;循环之后的操作 ){

    do sth;

    }

    课堂演示:

    用for循环打印1-100之间的整数

    for(int i=1;i<=100;i++){

    System.out.println(i);

    }

    学生练习:

    1)用for循环打印1-100的奇数

    2)用for循环改写从1到100的所有奇数相加的和

    public static void main(String[] args) {

    int sum = 0;

    for(int i=1;i<=100;i++){

    if(i%2!=0){

    sum += i;

    }

    }

    System.out.println(sum);

    }

    3)循环得到用户从控制台输入的5个整数,该整数为用户购买商品的价格,计算用户一共需要花费的总金额。

    public static void main(String[] args) {

    int sum = 0;

    for(int i=0;i<5;i++){

    System.out.println("请输入第"+(i+1)+"个商品价格:");

    int x = new Scanner(System.in).nextInt();

    sum += x;

    }

    System.out.println(sum);

    }

    4)随机产生一个10以内的正整数,用户循环输入三个整数,如果用户输入的整数包含随机数,输出“猜对了”;反之,输出“没猜到”。

    例如:

    随机数为4,用户输入数为:2,3,4。输出:猜对了

    随机数为4,用户输入数为:1,2,3。输出:没猜到

    @Test

    public void forTest03(){

    //首先生成一个10以内的整数

    int shuiji=new Random().nextInt(10);

    System.out.println("随机数"+shuiji);

    //标识用户是否猜中

    boolean chaizhong=false;

    Scanner sc=new Scanner(System.in);

    //循环三次

    for(int i=1;i<=3;i++){

    //提示用户猜

    System.out.println("猜");

    int chai=sc.nextInt();

    if(shuiji==chai){

    chaizhong=true;

    }

    }

    //三次循环之后,判定时用户是否猜中

    if(chaizhong){

    System.out.println("猜对了");

    }else{

    System.out.println("没猜到");

    }

    }

    上面的程序,考虑 如果第一次或第二次就猜对,还有没有必要执行下一次,如果没有必须,如何及时中断呢,用到了流程中断。

    流程中断
    break; 退出循环 假设100次,第55次时,调用了break,结束所有

    continue; 跳过当前这次,继续下一次

    课堂练习:

    用break改造刚才的程序

    1)随机产生一个10以内的正整数,用户循环输入三个整数,如果用户输入的整数包含随机数,输出“猜对了”;反之,输出“没猜到”。

    例如:

    随机数为4,用户输入数为:2,3,4。输出:猜对了

    随机数为4,用户输入数为:1,2,3。输出:没猜到

    @Test

    public void forTest03(){

    //首先生成一个10以内的整数

    int shuiji=new Random().nextInt(10);

    System.out.println("随机数"+shuiji);

    //标识用户是否猜中

    boolean chaizhong=false;

    Scanner sc=new Scanner(System.in);

    //循环三次

    for(int i=1;i<=3;i++){

    //提示用户猜

    System.out.println("猜");

    int chai=sc.nextInt();

    if(shuiji==chai){

    chaizhong=true;

    //中止整个循环

    break;

    }

    }

    //三次循环之后,判定时用户是否猜中

    if(chaizhong){

    System.out.println("猜对了");

    }else{

    System.out.println("没猜到");

    }

    }

    continue
    //50个人循环做题,到编号为6的王振生处和25胡启昊就跳过

    //跳过当次循环,进行下一次,continue;

    @Test

    public void conTest(){

    for(int i=1;i<=50;i++){

    //如果这个数是6或者25就跳过

    if(i==6||i==25){

    continue;

    }else{

    //否则打印 第*号的人开始做题

    System.out.println("第"+i+"号学生做题");

    }

    }

    }

    //从1-100报数,逢7和7的倍数跳过

    @Test
    public void test07(){
      for(int i=1;i<=100;i++){
          //跳过的逻辑
          //个数上是7或者10位上是7  (i/1%10==7 || i/10%10==7) 
          if(i%7==0||i/1%10==7 || i/10%10==7){
              System.out.println("跳过"+i);
              continue;
          }
          System.out.println("应该报的:"+i);
      }
    }
    

    //用continue 显示50以内的奇数

    @Test

    public void test2(){

    for(int i=0;i<=50;i++){

    //偶数,跳过当前这个,执行下一个

    if(i%2==0){

    continue;

    }else{

    System.out.println(i);

    }

    }

    }

    死循环
    while(true){

    }

    do{

    }while(true)

    for循环

    for(;;){

    }

    for(int i=0;;i++){

    }

    @Test

    public void test3(){

    for(int i=1;;i++){

    System.out.println(i);

    }

    }

    课堂练习:

    //分别用for while计算从1-n之间的和,如果和大于5000时,打印此时的数值,停止

    for:

    public void test4(){

    int count=0;

    for(int i=1;;i++){

    count+=i;

    if(count>5000){

    System.out.println(i);

    break;

    }

    }

    }

    while1:

    public void test5(){

    int count=0;

    int i=1;

    while(true){

    count+=i;

    if(count>5000){

    System.out.println(i);

    break;

    }else{

    i++;

    }

    }

    }

    while2:

    public void test6(){

    int count=0;

    int i=1;

    boolean flag=true;

    while(flag){

    count+=i;

    if(count>5000){

    System.out.println(i);

    flag=false;

    }else{

    i++;

    }

    }

    }

    循环嵌套
    练习1)打印99表

    @Test

    public void doubleForTest(){
    

    /* 1*1=1

        2*1=2 2*2=4
    
        3*1=3 3*2=6 3*3=9*/
    

    //最外层的i循环是从1-9

    //里层的循环j是从1---->i

    for(int i=1;i<10;i++){

    for(int j=1;j<=i;j++){

    System.out.print(i+""+j+"="+ij+" ");

    }

    System.out.println();

    }

    }
    

    课后习题:

    选做题3 :求大于200的最小质数

    @Test

    public void homework13() {

    for (int i = 200; i <= 300; i++) {

    boolean f = true;

    for (int j = 2; j < i; j++) {

    if (i % j == 0) {

    f = false;

    break;

    }

    }

    if (f) {

    System.out.println(i);

    break;

    }

    }

    }

    百元百鸡问题

    /**

    • 母鸡3元每只,公鸡4元每只,小鸡0.5元每只,如果花100元钱,想买100只鸡,有多少种可能?

    */

    @Test

    public void xhTest01(){

    int count=0;

    for(int i=0;i<=33;i++){

    for(int j=0;j<=25;j++){

    int m=100-i-j;

    if((i3+j4+m*0.5)==100&&i+j+m==100){

    System.out.println("母鸡数"+i);

    System.out.println("公鸡数 "+j);

    System.out.println("小鸡数"+m);

    System.out.println("--------- ");

    count++;

    }

    }

    }

    System.out.println("一共"+count+"种组合");

    }

    结果:

    母鸡数6

    公鸡数 10

    小鸡数84


    母鸡数13

    公鸡数 5

    小鸡数82


    母鸡数20

    公鸡数 0

    小鸡数80


    一共3种组合

    练习2)一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

    @Test

    public void test2(){

    //一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

    double sum=100.00;
    
    //原始高度
    
    double h=100.00;
    
    //循环9次
    
    for(int i=0;i<9;i++){
    
    //先折半
    
    h=h/2;
    
    //总高度
    
    sum=sum+h*2;
    
    }
    
    System.out.println("经历多少米="+sum);
    
    System.out.println("第10次反弹多高"+h/2);
    

    }

    经历多少米=299.609375

    第10次反弹多高0.09765625

    3.)打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各个位 的数字的立方和等于该数本身。

    @Test

    public void test3(){

    //从100-999

    for(int i=100;i<=999;i++){

    //首先得到百十个位 345

    int bai=i/100;

    int shi=i/10%10;

    int ge=i%10;

    if(baibaibai+shishishi+gegege==i){

    System.out.println(i);

    }

    }

    }

    答案:

    153

    370

    371

    407

    4)int total =0;

    for ( int i = 0;i < 4; i++ ){

    if ( i == 1) continue;

    if ( i == 2) break;

    total += i;

    }

    则执行完该程序段后total的值为:( )。

    A、0 B、1 C、3 D、6

    作业:

    1)continue label 学习

    1. 判断2064年是不是闰年。

    闰年判断规则:

    能被400整除的是闰年

    能被100整除,不能被400整除的不是闰年

    能被4整除,不能被100整除的是闰年

    其他的不是闰年

    课后作业第9题

    @Test

    public void homework09() {

    /**

    • 有一个不多于5位的正整数,求它是几位数,分别打印出每一位数字。(知识点:条件语句) [必做题]

    */

    Scanner sc = new Scanner(System.in);

    System.out.println("请输入一个不多于5位的数");

    int i = sc.nextInt();

    // 如果这个数大于5位,直接就提示错误

    if (i > 99999||i<=0) {

    System.out.println("输入数值不合法");

    } else {

    // 解析万位上的数

    int wan = i / 10000 % 10;

    // 解析千位上的数

    int qian = i / 1000 % 10;

    // 解析百位上的数

    int bai = i / 100 % 10;

    // 解析十位上的数

    int shi = i / 10 % 10;

    // 解析个位上的数

    int ge = i % 10;

    if (wan > 0) {

    System.out.println("5位数" + wan + "" + qian + "" + bai + "" + shi + "" + ge);

    } else if (qian > 0) {

    System.out.println("4位数" + qian + "" + bai + "" + shi + "" + ge);

    } else if (bai > 0) {

    System.out.println("3位数" + bai + "" + shi + "" + ge);

    } else if (shi > 0) {

    System.out.println("2位数" + shi + "" + ge);

    } else if (ge > 0) {

    System.out.println("1位数" + ge);

    }

    }

    }

    另外一种方法

    @Test

    public void test10(){

    //5、有一个不多于5位的正整数,求它是几位数,分别打印出每一位数字。

    Scanner sc=new Scanner(System.in);

    System.out.println("请输入一个5位以内的数");

    int i=sc.nextInt();

    int count=0;

    while(i!=0){

    int wei=i%10;//153-3 15-5 1-1

    System.out.println("每位上的数"+wei);

    i=i/10;//每次舍去一位 15 1

    count++;//1 2 3

    }

    System.out.println("一共几位"+count);

    }

    @Test

    public void test07(){

    Scanner sc=new Scanner(System.in);

    System.out.println("请输入一个7位以内的数");

    int i=sc.nextInt();

    int j=i,k=i;//用两个临时变量把i暂存到他那儿

    int sum=0;

    int n=0;//记录一共执行了几次

    //一共几位

    while(i!=0){

    i=i/10;//每次把上一次的结果除以10

    n++;

    }

    System.out.println("一共几位:"+n);

    System.out.println(j);

    //每位上的数是多少,以及count次方

    while(j!=0){

    int wei=j%10;//每位上的数

    System.out.println("每位上的数:"+wei);

    j=j/10;

    sum+=Math.pow(wei, n);

    }

    //和原数进行比较

    if(k==sum){

    System.out.println(k+"是自幂数");

    }else{

    System.out.println(k+"不是自幂数");

    }

    }

    课后习题

    第2题: 猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,

               第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
    
               以后每天早上都吃了前一天剩下的一半零一个。
    
               到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
    

    @Test

    public void homework02(){

    /* 猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,

    •  第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
      
    •  以后每天早上都吃了前一天剩下的一半零一个。
      
    •  到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
      

    第10天剩余桃数:1

    第9天剩余桃数: x/2-1=1 x=(1+1)*2=4

    第8天剩余桃数: x/2-1=4 x=(4+1)*2=10

    第10天剩余桃数:1 sum=1

    第9天剩余桃数:(1+1)2=4 sum=(sum+1)2=4

    第8天剩余桃数:(4+1)2=10 sum=(sum+1)2=10

    第7天剩余桃数:(10+1)*2=22

    第6天剩余桃数:(22+1)*2=46

    规律很明显,即每天剩余的桃数是第二天桃数加1的两倍

    */

    //第10天时的桃子数

    int sum=1;

    //循环九次

    for(int i=0;i<9;i++){

    sum=(sum+1)*2;

    }System.out.println(sum);}

    相关文章

      网友评论

          本文标题:第3章 流程控制语句(12课时)

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