(3)流程控制语句

1.if语句三种形式:(if在做判断题)

(1)if(条件表达式)
       { 执行语句 } //作用域仅限大括号内,省略大括号时,仅限if后的一句
(2)if(条件表达式)
       {
执行语句1}
      else
       {
执行语句2}
(3)if(条件表达式1)
       {
执行语句1}
     else if(条件表达式2)
       {
执行语句2}
          ……
     else
       {语句3}
2.switch语句 :(switch在做选择题)
(1)      switch(表达式)
              {
                case(常量表达式1):语句1;break;
                case(常量表达式2):语句2;break;
                case(常量表达式3):语句3;break;
                default:语句4;break;
              }
(2)      switch(x)
             {
               case 3:
               case 4:
               case 5:System.out.println(x+"月是春季");break;
               case 6:
               case 7:
               case 8:System.out.println(x+"月是夏季");break;
               case 9:
               case 10:
               case 11:System.out.println(x+"月是秋季");break;
               case 12:
               case 1:
               case 2:System.out.println(x+"月是冬季");break;
               default:System.out.println("输入的月份不正确");break;
             }
注意事项:
        java中的switch表达式仅限byte,short,int,char,随着jdk版本的升级,支持的数据类型也在增加,而C语言中的switch表达式可以是ANSI标准允许的任何类型。(jdk5.0支持枚举类型,jdk7.0支持字符串)
        case后的常量只是起到标号的作用,switch执行时寻找与表达式其匹配的入口标号,程序一直执行下去,直到遇到第一个break后跳出switch语句,否则一直执行所有case。
default总是在case执行完后如果没有找到入口标号才执行,而与其位置无关,如果case执行完后都没有找到入口标号,开始执行default,如果default是在多个case中间,则执行完case后,按顺序执行一遍defaul后面的各种语句,包括case或者除case语句以外的语句,直到遇到case中的break,如果没有break,则default后全部执行一遍后到switch结尾结束switch。所以default没有写在最后时break不能省略。
3.if...else与三元运算符的区别:
三元运算符在一定程度上可以简化if……else代码,但因为它是运算符,所以必须有运算结果,不能执行输出语句,例如:b=(x>5)?System.out.println("yes"):5;【如果x>5,需要把System.out.println("yes")的结果付给变量b,但其只是打印输出内容,没有结果赋值给b,所以不可行】
4.if与switch的用法:
当结果较少且较为具体时,推荐switch,结果会全部加载到内存,效率稍高,而if是顺序执行;
当结果是区间或布尔类型时,用if。
5.while语句与for语句:(循环结构)
while和for可以互换,区别:for循环中当循环增量i在for中定义时,循环增量的作用于仅限于大括号中,即跳出循环后i的内存释放,对于循环增量在循环后不需要的情况下,这种方法会节省一点内存;当然若循环增量如果在for之前声明,在for中初始化,这和while效果一样,并且用while时,只能先在while前定义循环变量,在while中做条件表达式判断。

while(){ }的格式                        do{ }...while()的格式

初始化表达式;                            初始化表达式;
while(条件表达式){                       do     
执行语句;                                  {  执行语句;}
}                                        while(条件表达式);  

不管条件满足与否,do{}...while()至少执行一次
6.for循环的特殊写法: (效果就等同于while) 
      int i=0;                                       int i=0;
      for(;i<5;){                                   while(i<5){
        i++                                               i++;
       }                                                }
7.累加思想、计数器思想(满足某个条件的数的个数)
如求1到100的和、1到100内能被7整除的整数的个数?
      int sum=0;                                     int counter;
      for(int i=1;i<=100;i++){                  for(int i=1;i<=100;i++){
          sum+=i;                                     if(i%7==0){
      }                                                  counter++;
                                                       }
}

8.其他流程控制语句:break,continue
  break默认跳出当前循环,如果是嵌套循环,想从内循环直接跳出外循环,可以给外循环加上标号,
如w:for(int x=1;x<=5;x++) 内循环写break w;
  continue默认结束本次循环,进入下一循环,当然在嵌套for循环下,类似break用标号可以结束本次循环直接进行下一个外部循环,continue w;。
注意:
(1)break用于选择结构或循环结构(switch 或loop)loop结构指for循环或while循环;continue用于循环结构
(2)break或continue单独存在时,即没有任何判断语句控制,下面不能有任何语句,因为执行不到,这时编译就不能通过
(3)break和continue不能在作用域外,这时会报错。
    如果是break        报错   :程序某一行在switch或loop处中断
    如果是continue     报错   :程序某一行在loop处中断

break和continue还可以加标号:
w:for (int x=0;x<10 ;x++ )
{
  n:for (int y=0;y<=x ;y++ )
    {
       System.out.print("$");
       break w;
    }
   System.out.println();
}

9.打印矩形  :         *****  
                       *****
                       *****
class ForDemo1{
    public static void main (String args[]){
        for(int x=0;x<3;x++){          //控制行数
            for (int y=0;y<5 ;y++ ){   //控制每一行的列数
                System.out.print("*");
            }
            System.out.println();      //仅用于每行末尾换行
        }
    }
}


总结:1.外循环控制行数,内循环控制每一行的列数
      2.for循环中的++和--可以互换,主要控制循环的次数,变量本身的定义没有太大意义。
        如for(int x=0;x<3;x++)--->for(int x=3;x>0;x--)
10.打印朝上的三角形:   *
                        **
                        ***
                        ****
                        *****
分析:第n行有n个*,二维图形,考虑for循环嵌套。与输出矩形不同,每一列都在变化,而矩形每一行列数是固
      的,考虑用一个变量保存列数。

class ForDemo2 {
    public static void main(String[] args) {
        int z=0;                              
        for (int x=0;x<5;x++ ) {        //输出5行
            for (int y=0;y<=z;y++ ){    //第1行输出1列,1个*,行数x增加1列数z就增加1 
                System.out.print("*");
            }
            z++;
            System.out.println();
        }
    }
}


既然z的变化与x同步,就可以令z=x,少设一个变量
class ForDemo2 {
    public static void main(String[] args) {
        for (int x=0;x<5;x++ ) {
            for (int y=0;y<=x;y++ ){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}


11.打印朝下的三角形:     *****
                          ****
                          ***
                          **
                          *
分析:该题图形与上图方向相反,考虑初始化变量设置问题
class ForDemo3 {
    public static void main(String[] args) {
        int z=1;
        for (int x=1;x<=5 ;x++ ){
            for (int y=z;y<=5 ;y++ ){ //第1行内循环循环5次,打印5个*,换行后,
                System.out.print("*");//即行数加1,每一行列数减1
            }
            System.out.print("\n");
            z--;
        }
    }
}


同理,既然z的变化与x同步,可以令z=x
class ForDemo3 {
    public static void main(String[] args) {
        for (int x=1;x<=5 ;x++ ){
            for (int y=x;y<=5 ;y++ ){  //注意,乍一看容易犯晕,感觉列数在递减,应该y--
                System.out.print("*"); //其实,循环要整体来看,只要是按同一效果输出多次,如输出多个*
            }                         //就用循环,循环次数取决于初始化值每次变化后与条件之间的差距,效              System.out.print("\n");  //果等同于:for(int y=5;y>=x;y--)                              
        }
    }
}


总结:尖朝上,改变循环条件
      尖朝下,改变初始化值

12.打印:   1
            12
            123
            1234
            12345
分析:多行多列应该用嵌套for循环,与尖朝上的三角形的区别是,每行输出的数都是从1开始自增,应该在内循环的输出上做文章。(这里与上面的区别出来了,循环增量参与输出了,上面图形循环增量仅控制*输出的次数。)
class ForDemo4{
    public static void main (String args[]){
        for (int x=1;x<=5 ;x++ ){
            for (int y=1;y<=x ;y++ ){  //这里因为输出的是变量y,y就不只起到循环变量的作用,还参与输出
                System.out.print(y);   // 每一行从1开始自增,所以y的初始化值是1,y的变化受x的
            }                          //影响,所以x也不能随便定义
            System.out.println();
        }
    }
}


13.打印九九乘法表:  1*1=1
                     1*2=2    2*2=4
                     1*3=3    2*3=6    3*3=9
                     ……
分析:尖朝上的三角形,嵌套for循环,改变循环条件,每一行的被乘数提取出来的图形就是上一题中图形
          现在每行又多了一个乘数,但该乘数是固定的,等于行数。
class ForDemo5{
    public static void main (String args[]){
         for (int x=1;x<=9 ;x++ ){
             for (int y=1;y<=x ;y++ ){
                 System.out.print(y+"*"+x+"="+y*x+"\t");
             }
             System.out.println();
         }
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值