java第三天(运算符、键盘录入和控制语句)

1:运算符(掌握)
  (1)算术运算符
    A:+,-,*,/,%,++,--
    B:+的用法
      a:加法
      b:正号
      c:字符串连接符

 1 class OperatorDemo {
 2     public static void main(String[] args) {
 3         //加法
 4         System.out.println(3+4);
 5         
 6         //正号
 7         System.out.println(+4);
 8         
 9         System.out.println('a');
10         System.out.println('a'+1);     //这里是加法
11         
12         //字符串连接符
13         System.out.println("hello"+'a'+1);
14         System.out.println('a'+1+"hello");    //先加后连接
15     }
16 }

 


    C:/和%的区别
      数据做除法操作的时候:

        /取得是商

         %取得是余数:(%2,可用于判断数的奇偶性,为“0”为偶,为“1”为奇)

        (一般组合用于求出一个多位数的每一位数)

1 //求出312的每一位数
2 
3 int a = 312;
4 
5 int ge = a%10;            //求出个位数
6 
7 int shi = a/10%10;        //求出十位数
8 
9 int bai = a/100%10;    //求出百位数        

 


    D:++和--的用法
      a:他们的作用是自增或者自减
      b:使用
        **单独使用
          放在操作数据的前面和后面效果一样。
          a++或者++a效果一样。
        **参与操作使用
          放在操作数的前面:先自增或者自减,再参与操作
          放在操作数的后面:先参与操作,再自增或者自减
          

 1 class OperatorDemo {
 2         public static void main(String[] args) {
 3             //定义两个变量
 4             int x = 3;
 5             int y = 4;
 6             
 7             //字符串的拼接
 8             //System.out.println("x:"+x);
 9             //System.out.println("y:"+y);
10             
11             System.out.println("x:"+x+",y:"+y);
12             
13             //单独使用
14             //x++;
15             //y--;
16             ++x;
17             --y;
18             //System.out.println(x);
19             System.out.println("x:"+x+",y:"+y);
20             
21             //意外的类型,常量是不可以这样做的
22             //System.out.println(10++);
23             
24             System.out.println("-------------------");
25             //参与运算使用
26             int a = 3;
27             int b = 4;
28             
29             //int c = a++;
30             //int d = b--;
31             
32             int c = ++a;
33             int d = --b;
34             
35             System.out.println("a:"+a); //4, 4
36             System.out.println("b:"+b); //3, 3
37             System.out.println("c:"+c); //3, 4
38             System.out.println("d:"+d); //4, 3
39         }
40 }  

  (2)赋值运算符
    A:=,+=,-=,*=,/=,%=等
    B:=叫做赋值运算符,也是最基本的赋值运算符
      int x = 10; 把10赋值给int类型的变量x。
    C:扩展的赋值运算符的特点
      隐含了自动强制转换。

  (3)比较运算符(无论运算符两端简单还是复杂最终结果是boolean类型)
    A:==,!=,>,>=,<,<=
    B:千万不要把==写成了=
  (4)逻辑运算符
    A:&,|,^,!,&&,||
    B:逻辑运算符用于连接boolean类型的式子
    C:结论
      &:有false则false
      |:有true则true
      ^:相同则false,不同则true。
      情侣关系。
      !:非true则false,非false则true

      &&:结果和&是一样的,只不过有短路效果。左边是false,右边不执行。
      ||:结果和|是一样的,只不过有短路效果。左边是true,右边不执行。

 1      int a = 3;
 2         int b = 4;
 3         int c = 5;
4 //^逻辑异或 5 System.out.println((a > b) ^ (a > c)); //false ^ false = false 6 System.out.println((a > b) ^ (a < c)); //false ^ true = true 7 System.out.println((a < b) ^ (a > c)); //true ^ false = true 8 System.out.println((a < b) ^ (a < c)); //true ^ true = false 9 System.out.println("---------------"); 10 11 //!逻辑非 12 System.out.println(!(a > b));          //!false = true 13 System.out.println(!(a < b));            //!true = false 14 System.out.println(!!(a > b));             //!!false = false 15 System.out.println(!!!(a > b)); //!!false = true

 

 


  (5)位运算符(了解)
    A:^的特殊用法
      一个数据针对另一个数据位异或两次,该数不变

1 int a = 10;
2 int b = 20;
3 
4 System.out.println(a ^ b ^ b); //10
5 System.out.println(a ^ b ^ a); //20

 

    B:面试题
      a:请实现两个变量的交换
        

 1 class OperatorTest {
 2     public static void main(String[] args) {
 3         int a = 10;
 4         int b = 20;
 5         
 6         System.out.println("a:"+a+",b:"+b);
 7         
 8         //方式1:使用第三方变量(开发中用的)
 9         
10         int c = a;
11         a = b;
12         b = c;
13         System.out.println("a:"+a+",b:"+b);
14         System.out.println("------------");
15         
16         
17         //方式2:用位异或实现(面试用)
18         //左边:a,b,a
19         //右边:a ^ b
20         
21         a = a ^ b;
22         b = a ^ b; //a ^ b ^ b = a
23         a = a ^ b; //a ^ b ^ a = b
24         System.out.println("a:"+a+",b:"+b);
25         
26         
27         //方式3:用变量相加的做法
28         
29         a = a + b; //a=30
30         b = a - b; //b=10
31         a = a - b; //a=20
32         System.out.println("a:"+a+",b:"+b);
33         
34         
35         //方式4:一句话搞定
36         b = (a+b) - (a=b); //b=30-20=10,a=20
37         System.out.println("a:"+a+",b:"+b);
38     }
39 }

 


      b:请用最有效率的方式计算出2乘以8的结果
        2<<3

 1 /*
 2     <<:左移    左边最高位丢弃,右边补齐0
 3     >>:右移    最高位是0,左边补齐0;最高为是1,左边补齐1
 4     >>>:无符号右移 无论最高位是0还是1,左边补齐0
 5     
 6     面试题:
 7         请用最有效率的方式写出计算2乘以8的结果?
 8             2 * 8
 9             
10             2 << 3
11 
12 */
13 class OperatorDemo3 {
14     public static void main(String[] args) {
15         //<< 把<<左边的数据乘以2的移动次幂
16         System.out.println(3 << 2); //3*2^2 = 3*4 = 12;
17     
18         //>> 把>>左边的数据除以2的移动次幂
19         System.out.println(24 >> 2); //24 / 2^2 = 24 / 4 = 6
20         System.out.println(24 >>> 2);
21         
22         System.out.println(-24 >> 2); 
23         System.out.println(-24 >>> 2);
24     }
25 }
26 /*
27     计算出3的二进制:11
28         00000000 00000000 00000000 00000011
29     (00)000000 00000000 00000000 0000001100
30         
31     >>的移动:    
32     计算出24的二进制:11000
33         原码:10000000 00000000 00000000 00011000
34         反码:11111111 11111111 11111111 11100111
35         补码:11111111 11111111 11111111 11101000
36         
37         11111111 11111111 11111111 11101000
38         1111111111 11111111 11111111 111010(00) 补码
39         
40         补码:1111111111 11111111 11111111 111010
41         反码:1111111111 11111111 11111111 111001
42         原码:1000000000 00000000 00000000 000110
43         
44         结果:-6
45         
46     >>>的移动:
47         计算出24的二进制:11000
48         原码:10000000 00000000 00000000 00011000
49         反码:11111111 11111111 11111111 11100111
50         补码:11111111 11111111 11111111 11101000
51         
52         11111111 11111111 11111111 11101000
53         0011111111 11111111 11111111 111010(00)
54         
55         结果:
56 */

 

    *位运算补充:

 1 /*
 2     位运算符:
 3         &,|,^,~
 4         <<,>>,>>>
 5         
 6     注意:
 7         要做位运算,首先要把数据转换为二进制。
 8 */
 9 class OperatorDemo {
10     public static void main(String[] args) {
11         //&,|,^,~
12         
13         int a = 3;
14         int b = 4;
15         
16         System.out.println(3 & 4);
17         System.out.println(3 | 4);
18         System.out.println(3 ^ 4);
19         System.out.println(~3);
20     }
21 }
22 /*
23     分析:因为是位运算,所以我们必须先把数据换算成二进制。
24     
25     3的二进制:11
26         00000000 00000000 00000000 00000011
27     4的二进制:100
28         00000000 00000000 00000000 00000100
29     
30     &位与运算:有0则0。
31         00000000 00000000 00000000 00000011
32        &00000000 00000000 00000000 00000100
33         -----------------------------------
34         00000000 00000000 00000000 00000000
35         结果是:0
36         
37     |位或运算:有1则1。
38         00000000 00000000 00000000 00000011
39        |00000000 00000000 00000000 00000100
40         -----------------------------------
41         00000000 00000000 00000000 00000111
42         结果是:7
43         
44     ^位异或运算:相同则0,不同则1。
45         00000000 00000000 00000000 00000011
46        &00000000 00000000 00000000 00000100
47         -----------------------------------
48         00000000 00000000 00000000 00000111
49         结果是:7
50         
51     ~按位取反运算符:0变1,1变0
52         00000000 00000000 00000000 00000011
53        ~11111111 11111111 11111111 11111100 (补码)
54        
55        补码:11111111 11111111 11111111 11111100
56        反码:11111111 11111111 11111111 11111011
57        原码:10000000 00000000 00000000 00000100
58         结果是:-4
59 */

 


  (6)三元运算符
    A:格式
      比较表达式?表达式1:表达式2;
    B:执行流程:
      首先计算比较表达式的值,看是true还是false。
      如果是true,表达式1就是结果。
      如果是false,表达式2就是结果。
    C:案例:
      a:比较两个数据是否相等      boolean flag = (x == y) ? true : false;
      b:获取两个数据中的最大值              int max = (x > y? x: y);
      c:获取三个数据中的最大值:    int max = (a > b)?((a > c)? a: c):((b > c)? b: c);

2:键盘录入(掌握)
  (1)实际开发中,数据是变化的,为了提高程序的灵活性,我们加入键盘录入数据。
  (2)如何实现呢?目前就记住
    A:导包
      import java.util.Scanner;
      位置:在class的上边
    B:创建对象
      Scanner sc = new Scanner(System.in);
    C:获取数据
      int x = sc.nextInt();
  (3)把三元运算符的案例加入键盘录入改进。

3:流程控制语句
  (1)顺序结构 从上往下,依次执行
  (2)选择结构 按照不同的选择,执行不同的代码
  (3)循环结构 做一些重复的代码

4:if语句(掌握)
  (1)三种格式
    A:格式1
      if(比较表达式) {
      语句体;
      }

      执行流程:
      判断比较表达式的值,看是true还是false
        如果是true,就执行语句体
        如果是false,就不执行语句体

    B:格式2
      if(比较表达式) {
      语句体1;
      }else {
      语句体2;
      }

      执行流程:
      判断比较表达式的值,看是true还是false
         如果是true,就执行语句体1
         如果是false,就执行语句体2

    C:格式3
      if(比较表达式1) {
        语句体1;
      }else if(比较表达式2){
        语句体2;
       }
      ...
      else {
        语句体n+1;
      }

      执行流程:
        判断比较表达式1的值,看是true还是false
          如果是true,就执行语句体1
          如果是false,就继续判断比较表达式2的值,看是true还是false
          如果是true,就执行语句体2
          如果是false,就继续判断比较表达式3的值,看是true还是false
          ...
          如果都不满足,就执行语句体n+1
  (2)注意事项
    A:比较表达式无论简单还是复杂,结果是boolean类型
    B:if语句控制的语句体如果是一条语句,是可以省略大括号的;如果是多条,不能省略。
      建议:永远不要省略。
    C:一般来说,有左大括号,就没有分号,有分号,就没有左大括号。
    D:else后面如果没有if,是不会出现比较表达式的。
    E:三种if语句其实都是一个语句,只要有一个执行,其他的就不再执行。
  (3)案例:
    A:比较两个数是否相等
    B:获取两个数中的最大值
    C:获取三个数中的最大值(if语句的嵌套)
    D:根据成绩输出对应的等级
    E:根据月份,输出对应的季节
    F:根据x计算对应y的值并输出
  (4)三元运算符和if语句第二种格式的关系
    所有的三元运算符能够实现的,if语句的第二种格式都能实现。
    反之不成立。

    如果if语句第二种格式控制的语句体是输出语句,就不可以。
    因为三元运算符是一个运算符,必须要有一个结果返回,不能是一个输出语句。

 1 /*
 2     获取三个数据中的最大值
 3     
 4     由此案例主要是为了讲解if语句是可以嵌套使用的。而且是可以任意的嵌套。
 5 */
 6 class IfTest4 {
 7     public static void main(String[] args) {
 8         int a = 10;
 9         int b = 30;
10         int c = 20;
11         
12         //三元实现
13         int max = (a>b)?(a>c?a:c):(b>c?b:c);
14         System.out.println("max:"+max);
15         System.out.println("--------");
16         
17         //用if语句实现
18         int max;
19         if(a > b) {
20             if(a > c) {
21                 max = a;
22             }else {
23                 max = c;
24             }
25         }else {
26             if(b > c) {
27                 max = b;
28             }else {
29                 max = c;
30             }
31         }
32         System.out.println("max:"+max);
33     }
34 }

 

posted @ 2015-08-31 20:44  ZashioM  阅读(359)  评论(0编辑  收藏  举报