02.运算符,程序流程控制…

来源:互联网 发布:linux 按文件名查找 编辑:程序博客网 时间:2024/06/06 20:20


 

1.比较运算符:运算后必须有结果,结果为true或false。

2.逻辑运算符:是用于连接boolean型的表达式。

   &:与。 

    ^:异或。

    |:或。

 

 &符号的运算特点:

    true & true = true;
    true & false = false;
     false& true = false;
    false & false = false;
 

 &的运算规律:
   &运算的两边只有有一个是false,结果肯定是false。
   只有两边都为true,结果才是true。

 

 | 的运算特点:

     true| true = true;
    true | false = true;
    false | true = true;
    false | false = false;

  |的运算规律:
    |运算的两边只要有一个是true,结果肯定是true。
   只有两边都为false。结果是false。

  

  ^(异或)的运算特点:

    
    true ^ true = false;
    true ^ false = true;
    false ^ true = true;
    false ^ false = false;

 

^的运算规律:

   符号两边结果相同,则结果为false。

   符号两边结果不相同,则结果为true。

  !:非。

   !true = false。

   !false = true。

 

  面试级别的问题:

    双&时,如果左边为真,右边参与运算。如果左边为假,则右边不参与运算。

    单&时,无论左边的运算结果是什么,右边都参与运算。

    所以,双&比单&要高效。

   

    双|时,如果左边为假,右边参与运算。 如果左边为真,右边不参与运算。

   单|时,无论左边的运算结果是什么,右边都参与运算。

    所以,双|同样比单|要高效。

 

3.位运算符

  6 & 3 =2;             6 | 3 =7;                    6 ^ 3 ^3 = 6;

  0110                     0110                             110

&0011                  0011                           ^ 011

________         _________                      ________

  0010                     0111                              101

                                                                   011

                                                             _________

                                                                     110

 

结论:①&可应用与取出某一位的值。

     ②|用于保留某一有效位。            

     ③一个数异或同一个数两次,结果还是这个数。所以,异或还可以用于加密。

 

其他位运算符:

 <<:左移。3<<2= 3*2*2=12.

    左移其实是完成2的几次幂。

 >>:右移。3>>1 = 3/2=1. 

     右移其实是该数据除以2的几次幂。

     对于高位出现的空位,原来高位是什么就用什么补空位,以保证数据符号不变。

>>>:无符号右移。3>>>1 = 3/2 =1.

    数据进行无符号右移时,无论原高位是什么,高位出现的空位,都用0补。

 

例:完成两个数值互换。

    int a = 3,b = 5,编程实现a,b互换。

法一://此方法阅读性强,适用于开发。

    intc;

    c =a;

    a =b;

    b =c;

 

法二://此方法使用时注意两个整数是否过大,超出int范围时,会强制转换。

    a =a+b;

    b= a-b;

    a =a-b;

 

法三://此方法高级,但阅读性差。适用于面试。

    a =a^b;

    b =a^b;

    a =a^b;

 

4.三元运算符

  格式:(条件表达式)?表达式1:表达式2;

    条件表达式结果为true,则会运算表达式1;

    条件表达式结果为false,则会运算表达式2。

  应用:获取两个整数中较大的整数。

      int a, b;

    int max = a>b?a:b;

 

5.判断结构

  格式1:

       if(条件表达式)

       {

           执行语句;       //执行语句为单条语句是,大括号可以省略。

       }

——————————————————————————————

  格式2:

       if(条件表达式)

       {

           执行语句;

       }

      else

      {

          执行语句;

       }

   当if else语句运算后,有一个具体的值,可以用三元运算符。

——————————————————————————————

格式3:

     if(条件表达式1)

     {

         执行语句1;

      }

     else if(条件表达式2)

     {

         执行语句2;

      }

     else if(条件表达式3)

     {

         执行语句3;

     }

         .

         .

         .

     else

      {

          执行语句;

      }

 

练习:星期。

   根据用户指定的数据,判断数据对应的星期。

   int week = 10;

  if(week==1)
   System.out.println(week+"对应中文是星期一");
  else if(week==2)
   System.out.println(week+"对应中文是星期二");
  else if(week==3)
   System.out.println(week+"对应中文是星期三");
  else if(week==4)
   System.out.println(week+"对应中文是星期四");
  else if(week==5)
   System.out.println(week+"对应中文是星期五");
  else if(week==6)
   System.out.println(week+"对应中文是星期六");
  else if(week==7)
   System.out.println(week+"对应中文是星期日");
  else
   System.out.println(week+"没有对应的星期");
  

6.选择结构(switch语句)

    格式:

          switch(表达式)

          {

             case 取值1:

                        执行语句;

                        break;

             case 取值2:

                        执行语句;

                        break;

             ...

                        ...

             default:

                        执行语句;

                        break;

 

           }

 

注意:①switch语句中,各个case编写没有顺序要求。

     ②但是有执行顺序:先判断各个case的值,只有几个case值都无效时,才判断default。

     ③紧挨着大括号的break可以省略,如:

              ...

             System.out.println(a+b);

              //break;

        }

    ④当有一个正确答案时,若没有break,则程序会顺序向下执行;

      且不再判断case的值,直到碰到break或}。

 

  例一:

       int a = 3;

       switch(a)

       {

         default:

                 System.out.println("1");

          case4:

                 System.out.println("2");

         case 1:

                 System.out.println("3");

                 break;

        }

  输出结果为 123

 

    例二:用switch语句实现季节判断。

 

        intmonth = 8;

        switch(month)
         {
             case 3:
             case 4:
             case 5:
                    System.out.println(month+"月对应的是春季");
                     break;
             case 6:
             case 7:
             case 8:
                    System.out.println(month+"月对应的是夏季");
                     break;
             case 9:
             case10:
            case 11:
                     System.out.println(month+"月对应的是秋季");
                     break;
             case12:
              case1:
              case2:
                    System.out.println(month+"月对应的是冬季");
                    break;
             default:
                    System.out.println(month+"月没有对应的季节");
                     break;//可以省略。
          }

总结:if和switch的应用。

     if:  1.对具体的值进行判断。

           2.对区间进行判断。

           3.对运算结果是boolean类型的表达式进行判断。

  

  switch:

           1.对实体值进行判断。

            2.值的个数通常是固定的。

     对于几个固定值进行判断,建议使用switch语句。

     因为switch语句会将具体值都加载进内存,效率相对高一些。

     不过,现在java中switch很少用,因为其书写复杂。

 

7.循环结构

   while,dowhile,for

 ①while(条件表达式)

    {

      执行语句;

    }

 

 ②do                           //无论条件是否满足,循环条件至少执行一次。

    {

      执行语句;

    }while(条件表达式)

 

  ③for

    for(循初始化表达式;循环条件表达式;循环后的表达式)

      {

          执行语句;

      }

 

   例:用for循环完成累加。

    int sum =0;

    for(intx=1;x<=10;x++)

         sum=sum+x;

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

 

    for和while的特点:

    1.for和while可以互换。

    2.如果需要通过变量来控制对循环控制时,该变量只作为循环增量存在时,有小区别。

    例如:

     int x=1;

    while(x<5)

     {

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

      }

          System.out.println("x="+x);//此处的x可以打印,因为运算完之后,x还占用内存,但是已经没用了。所以会浪费内存。

 

     但是用for循环:

       for(int y=1;y<5;y++)

          {

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

          }

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

 

   无限循环最简单的形式:

      while(true){}

      for(; ;){}

 

   什么时候使用循环结构呢?

     ①当对某些代码执行多次时,使用循环结构。

     ②当对一个条件进行一次判断时,可以使用if语句。

     ③当对一个条件进行多次判断时,可以使用while语句。

     

     注意:

          1.在使用循环时,一定要明确哪些语句需要参与循环,哪些不需要。

           2.循环在通常情况下,需要定义条件,需要控制次数。

 

8.循环嵌套

   例一:打印如下图形。

        *****
        *****
        *****
        *****

 

  for(int x=0;x<4; x++)//外循环控制的是行数
  {
     for(int y=0; y<5; y++)//内循环控制的是每一行的个数
       {
              System.out.print("*");
        }
               System.out.println();
  }

 

   例二:打印99乘法表。

       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();
        }

    

9.转义字符介绍

           \n:换行会车。

            \t:制表符(tab),帮助对齐。

           \r:按下回车键。

        

        \n和\r:不同系统回车符不一样。

               windows系统中回车符又两个字符组成:\r\n。

               有些软件只能识别一个回车符。

               linux中,回车符是\n。

             

10.其他流程控制语句

   break(跳出),continue(继续)

 ①break:跳出

   作用范围:switch语句,循环语句。

  

注意:当break语句单独存在时,下面不要定义其他语句,因为执行不到。

      如果出现了循环嵌套,break想要跳出指定的循环,可以通过标号来完成。

               

  for(int x=0; x<3; x++)
  {
   if(x==1)
    break;
   System.out.println("x="+x);//执行不到。
  }
  

  

xiaoqiang:for (int x=0; x<3 ;x++ )
  {
    wangcai:for (int y=0; y<4 ; y++)
      {
         System.out.println("x="+x);
          breakxiaoqiang;//明确跳出外循环,通过标号来操作。
       }

  }

 

 ②continue:继续。

   作用范围:循环结构。

  continue:结束本次循环,继续下次循环。
            如果continue单独存在时,下面不要有任何语句,因为执行不到。

  for (int x=0;x<11 ;x++ )
  {
   if(x%2==0)
    continue;
   System.out.println("x="+x);//执行不到。
  }
  


  xiaoqiang:for (int x=0;x<3 ;x++ )
  {
   wangcai:for(int y=0; y<4 ; y++)
   {
    System.out.println("x="+x);
    continuexiaoqiang;//结束本次循环,继续下一次循环。
   }
   
  }