• 03_运算符、键盘录入、流程控制


    1:运算符(掌握)
    2:键盘录入(掌握)
    3:流程控制语句
    4:if语句(掌握)

    1:运算符(掌握)
     (1)算术运算符
      A:+,-,*,/,%,++,--
      B:+的用法
       a:加法
       b:正号
       c:字符串连接符
      C:/和%的区别
       数据做除法操作的时候,/取得是商,%取得是余数
      D:++和--的用法
       a:他们的作用是自增或者自减
       b:使用
        **单独使用
         放在操作数据的前面和后面效果一样。
         a++或者++a效果一样。
        **参与操作使用
         放在操作数的前面:先自增或者自减,再参与操作
          int a = 10;
          int b = ++a;
         放在操作数的后面:先参与操作,再自增或者自减
          int a = 10;
          int b = a++;

     1 /*
     2     运算符:
     3         就是对常量和变量进行操作的符号。
     4         
     5     分类:算术运算符,赋值运算符,比较运算符,逻辑运算符,位运算符,三目运算符
     6 
     7     算术运算符:
     8         +,-,*,/,%,++,--
     9         
    10     注意事项:
    11         A:整数相除只能得到整数。如果想得到小数,必须把数据变化为浮点数类型
    12         B:/获取的是除法操作的商,%获取的是除法操作的余数
    13 */
    14 
    15 class OperatorDemo {
    16     public static void main(String[] args) {
    17         //定义变量
    18         int x = 3;  //把3赋值给int类型的变量x
    19         int y = 4;
    20         
    21         System.out.println(x+y);
    22         System.out.println(x-y);
    23         System.out.println(x*y);
    24         System.out.println(x/y); //整数相除只能得到整数
    25         
    26         //我就想得到小数,该肿么办呢?
    27         //只需要把操作的数据中任意的一个数据变为浮点数
    28         System.out.println(x*1.0/y);
    29         
    30         //%的应用
    31         System.out.println(x%y); //得到的是余数
    32     }
    33 }


    ++,--运算符的使用:

     1 /*
     2     ++,--运算符的使用:
     3         单独使用:
     4             放在操作数的前面和后面效果一样。(这种用法是我们比较常见的)
     5         参与运算使用:
     6             放在操作数的前面,先自增或者自减,然后再参与运算。
     7             放在操作数的后面,先参与运算,再自增或者自减。
     8             
     9     作用:就是对变量进行自增1或者自减1。
    10 */
    11 class OperatorDemo2 {
    12         public static void main(String[] args) {
    13             //定义两个变量
    14             int x = 3;
    15             int y = 4;
    16             
    17             //字符串的拼接
    18             //System.out.println("x:"+x);
    19             //System.out.println("y:"+y);
    20             
    21             System.out.println("x:"+x+",y:"+y);
    22             
    23             //单独使用
    24             //x++;
    25             //y--;
    26             ++x;
    27             --y;
    28             //System.out.println(x);
    29             System.out.println("x:"+x+",y:"+y);
    30             
    31             //意外的类型,常量是不可以这样做的
    32             //System.out.println(10++);
    33             
    34             System.out.println("-------------------");
    35             //参与运算使用
    36             int a = 3;
    37             int b = 4;
    38             
    39             //int c = a++;
    40             //int d = b--;
    41             
    42             int c = ++a;
    43             int d = --b;
    44             
    45             System.out.println("a:"+a); //4, 4
    46             System.out.println("b:"+b); //3, 3
    47             System.out.println("c:"+c); //3, 4
    48             System.out.println("d:"+d); //4, 3
    49         }
    50 }

    +的用法:

     1 /*
     2     +的用法:
     3         A:加法
     4         B:正号
     5         C:字符串连接符
     6 */
     7 class OperatorDemo3 {
     8     public static void main(String[] args) {
     9         //加法
    10         System.out.println(3+4);
    11         
    12         //正号
    13         System.out.println(+4);
    14         
    15         System.out.println('a');
    16         System.out.println('a'+1); //这里是加法
    17         
    18         //字符串连接符
    19         System.out.println("hello"+'a'+1);
    20         System.out.println('a'+1+"hello");
    21     }
    22 }


    ++,--面试题:

     1 /*
     2     ++,--的练习题
     3     
     4     第一题:
     5     int a = 10;
     6     int b = 10;
     7     int c = 10;
     8 
     9     a = b++;
    10     c = --a;
    11     b = ++a;
    12     a = c--;
    13     请分别计算出a,b,c的值
    14     
    15     第二题:
    16     int x = 4;
    17     int y = (x++)+(++x)+(x*10);
    18     请分别计算出x,y的值
    19 */
    20 class OperatorTest {
    21     public static void main(String[] args) {
    22         int a = 10;
    23         int b = 10;
    24         int c = 10;
    25 
    26         a = b++; //a=10,b=11,c=10
    27         c = --a; //a=9,b=11,c=9
    28         b = ++a; //a=10,b=10,c=9
    29         a = c--; //a=9,b=10,c=8
    30         
    31         System.out.println("a:"+a);
    32         System.out.println("b:"+b);
    33         System.out.println("c:"+c);
    34         System.out.println("--------------");
    35         
    36         int x = 4;
    37         int y = (x++)+(++x)+(x*10);
    38         //4+6+60
    39         //x=5,6
    40         
    41         System.out.println("x:"+x);
    42         System.out.println("y:"+y);
    43     }
    44 }

    (2)赋值运算符
      A:=,+=,-=,*=,/=,%=等
      B:=叫做赋值运算符,也是最基本的赋值运算符
       int x = 10; 把10赋值给int类型的变量x。
      C:扩展的赋值运算符的特点
       隐含了自动强制转换。
       
       面试题:
        short s = 1;
        s = s + 1;
        
        short s = 1;
        s += 1;
        请问上面的代码哪个有问题?

     1 /*
     2     赋值运算符:
     3         基本的赋值运算符:=
     4             把=右边的数据赋值给左边。
     5             
     6         扩展的赋值运算符:+=,-=,*=,/=,%=
     7             += 把左边和右边做加法,然后赋值给左边。
     8 */
     9 class OperatorDemo {
    10     public static void main(String[] args) {
    11         //定义一个变量
    12         int x = 10;
    13         
    14         //其他用法
    15         int a,b; 
    16         a = b = 10;
    17         System.out.println(a); 
    18         System.out.println(b);
    19         System.out.println("-----------");
    20 
    21         //定义一个变量
    22         int y = 10;
    23         
    24         y += 20;
    25         
    26         System.out.println(y);
    27         
    28     }
    29 }

    面试题:

     1 /*
     2     面试题:
     3         short s=1;s = s+1; 
     4         
     5         short s=1;s+=1;
     6         上面两个代码有没有问题,如果有,那里有问题。
     7         
     8         为什么第二个木有问题呢?
     9             扩展的赋值运算符其实隐含了一个强制类型转换。
    10             
    11             s += 1;
    12             不是等价于 s = s + 1;
    13             而是等价于 s = (s的数据类型)(s + 1);
    14 */
    15 class OperatorTest {
    16     public static void main(String[] args) {
    17         //short s = 1;
    18         //s = s + 1;
    19         //System.out.println(s);
    20         
    21         short s = 1;
    22         s += 1; //好像是 s = s + 1;
    23         System.out.println(s);
    24     }
    25 }

     (3)比较运算符
      A:==,!=,>,>=,<,<=
      B:无论运算符两端简单还是复杂最终结果是boolean类型。
      C:千万不要把==写成了=

     1 /*
     2     比较运算符:
     3         ==,!=,>,>=,<,<=
     4         
     5     特点:
     6         无论你的操作是简单还是复杂,结果是boolean类型。
     7         
     8     注意事项:
     9         "=="不能写成"="。
    10 */
    11 class OperatorDemo {
    12     public static void main(String[] args) {
    13         int x = 3;
    14         int y = 4;
    15         int z = 3;
    16     
    17         System.out.println(x == y);
    18         System.out.println(x == z);
    19         System.out.println((x+y) == (x+z));
    20         System.out.println("------------");
    21         
    22         System.out.println(x != y);
    23         System.out.println(x > y);
    24         System.out.println(x >= y);
    25         System.out.println(x < y);
    26         System.out.println(x <= y);
    27         System.out.println("------------");
    28         
    29         int a = 10;
    30         int b = 20;
    31         
    32         //boolean flag = (a == b);
    33         //boolean flag = (a = b); //这个是有问题的,不兼容的类型
    34         //System.out.println(flag);
    35         
    36         int c = (a = b); //把b赋值给a,然后把a留下来
    37         System.out.println(c);
    38     }
    39 }

     (4)逻辑运算符
      A:&,|,^,!,&&,||
      B:逻辑运算符用于连接boolean类型的式子
      C:结论
       &:有false则false
       |:有true则true
       ^:相同则false,不同则true。
        情侣关系。
       !:非true则false,非false则true
       
       &&:结果和&是一样的,只不过有短路效果。左边是false,右边不执行。
       ||:结果和|是一样的,只不过有短路效果。左边是true,右边不执行。

     1 /*
     2     逻辑运算符:
     3         &,|,^,!
     4         &&,||
     5     特点:
     6         逻辑运算符一般用于连接boolean类型的表达式或者值
     7         
     8         表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子。
     9             算术表达式:a + b
    10             比较表达式:a == b
    11             
    12     结论:
    13         &逻辑与:有false则false
    14         |逻辑或:有true则true
    15         ^逻辑异或:相同为false,不同为true.
    16         !逻辑非:非false则true,非true则false
    17             特点:偶数个不改变本身。
    18 */
    19 class OperatorDemo {
    20     public static void main (String [] args){
    21         int a = 3;
    22         int b = 4;
    23         int c = 5;
    24         
    25         //&逻辑与
    26         System.out.println((a > b) & (a > c));  //false & false =false
    27         System.out.println((a > b) & (a < c));    //false & true =false
    28         System.out.println((a < b) & (a > c));    //true & false =false
    29         System.out.println((a < b) & (a < c));    //true & true =true
    30         System.out.println("----------------");
    31         
    32         //|逻辑或
    33         System.out.println((a > b) | (a > c));  //false | false =false
    34         System.out.println((a > b) | (a < c));    //false | true =true
    35         System.out.println((a < b) | (a > c));    //true | false =true
    36         System.out.println((a < b) | (a < c));    //true | true =true
    37         System.out.println("----------------");
    38         
    39         //^逻辑异或
    40         System.out.println((a > b) ^ (a > c));  //false ^ false =false
    41         System.out.println((a > b) ^ (a < c));    //false ^ true =true
    42         System.out.println((a < b) ^ (a > c));    //true ^ false =true
    43         System.out.println((a < b) ^ (a < c));    //true ^ true =false
    44         System.out.println("----------------");        
    45         
    46         //!逻辑非
    47         System.out.println(!(a > b));  //!false = true
    48         System.out.println(!(a < c));    //!true =false
    49         System.out.println(!!(a < c));    //!!true =true
    50         System.out.println(!!!(a < c));    //!!!true =false
    51         System.out.println("----------------");
    52     }
    53     
    54 }


    &&与&以及 ||与|的区别:

     1 /*
     2     &&和&的区别? 同理||和|的区别
     3         A:最终结果一样
     4         B:&&具有短路效果。左边是false右边不执行
     5     
     6     开发中常用的逻辑运算符:
     7         &&,||,!
     8     
     9     
    10 */
    11 class OperatorDemo2 {
    12         public static void main (String [] args){
    13         int a = 3;
    14         int b = 4;
    15         int c = 5;
    16         
    17         //&&双与
    18         System.out.println((a > b) && (a > c));  //false & false =false
    19         System.out.println((a > b) && (a < c));    //false & true =false
    20         System.out.println((a < b) && (a > c));    //true & false =false
    21         System.out.println((a < b) && (a < c));    //true & true =true
    22         System.out.println("----------------");    
    23         
    24         //||逻辑或
    25         System.out.println((a > b) || (a > c));  //false || false =false
    26         System.out.println((a > b) || (a < c));    //false || true =true
    27         System.out.println((a < b) || (a > c));    //true || false =true
    28         System.out.println((a < b) || (a < c));    //true ||true =true
    29         System.out.println("----------------");    
    30 
    31         int x = 3;
    32         int y = 4;
    33         
    34         //boolean b1 = ((x++ == 3) & (y++ == 4));
    35         //boolean b1 = ((x++ == 3) && (y++ == 4);
    36         //boolean b1 = ((++x == 3) & (++y == 4));    //4 5 false
    37         boolean b1 = ((++x == 3) && (++y == 4));    //4 4 false
    38         System.out.println("x:"+x);
    39         System.out.println("y:"+y);
    40         System.out.println(b1);
    41     
    42         }
    43 }

    (5)位运算符(了解)
      A:^的特殊用法
       一个数据针对另一个数据位异或两次,该数不变
      B:面试题
       a:请实现两个变量的交换
        **采用第三方变量
        **用位异或运算符
         左边a,b,a
         右边a^b
       b:请用最有效率的方式计算出2乘以8的结果
        2<<3

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


    ^运算符的特点:

     1 /*
     2     ^的特点:一个数据对另一个数据位异或两次,该数本身不变。
     3 */
     4 class OperatorDemo2 {
     5     public static void main(String[] args) {
     6         int a = 10;
     7         int b = 20;
     8         
     9         System.out.println(a ^ b ^ b); //10
    10         System.out.println(a ^ b ^ a); //20
    11     }
    12 }


    移位运算符:

     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         结果:1073741818
    56 */

    两个数交换:

     1 /*
     2     面试题:
     3         请自己实现两个整数变量的交换
     4         注意:以后讲课的过程中,我没有明确指定数据的类型,默认int类型。
     5 */
     6 class OperatorTest {
     7     public static void main(String[] args) {
     8         int a = 10;
     9         int b = 20;
    10         
    11         System.out.println("a:"+a+",b:"+b);
    12         
    13         //方式1:使用第三方变量(开发中用的)
    14         /*
    15         int c = a;
    16         a = b;
    17         b = c;
    18         System.out.println("a:"+a+",b:"+b);
    19         System.out.println("------------");
    20         */
    21         
    22         //方式2:用位异或实现(面试用)
    23         //左边:a,b,a
    24         //右边:a ^ b
    25         /*
    26         a = a ^ b;
    27         b = a ^ b; //a ^ b ^ b = a
    28         a = a ^ b; //a ^ b ^ a = b
    29         System.out.println("a:"+a+",b:"+b);
    30         */
    31         
    32         //方式3:用变量相加的做法
    33         /*
    34         a = a + b; //a=30
    35         b = a - b; //b=10
    36         a = a - b; //a=20
    37         System.out.println("a:"+a+",b:"+b);
    38         */
    39         
    40         //方式4:一句话搞定
    41         b = (a+b) - (a=b); //b=30-20=10,a=20
    42         System.out.println("a:"+a+",b:"+b);
    43     }
    44 }

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

     1 /*
     2     单目运算符:~3
     3     双目运算符:3 + 4
     4 
     5     三目运算符:
     6         格式:比较表达式?表达式1:表达式2;
     7         
     8         比较表达式:结果是一个boolean类型。
     9         
    10         执行流程:
    11             根据比较表达式的计算返回一个true或者false。
    12             如果是true,就把表达式1作为结果。
    13             如果是false,就把表达式2作为结果。
    14 */
    15 class OperatorDemo {
    16     public static void main(String[] args) {
    17         int x = 100;
    18         int y = 200;
    19         
    20         int z = ((x > y)? x: y);
    21         
    22         //int z = ((x < y)? x: y);
    23         
    24         //int z = ((x == y)? x: y);
    25         
    26         //报错
    27         //int z = ((x = y)? x : y);
    28         
    29         System.out.println("z:"+z);
    30     }
    31 }

    练习:

     1 /*
     2     练习:
     3         获取两个整数中的最大值
     4         获取三个整数中的最大值
     5         比较两个整数是否相同
     6 */
     7 class OperatorTest {
     8     public static void main(String[] args) {
     9         //获取两个整数中的最大值
    10         int x = 100;
    11         int y = 200;
    12         
    13         int max = (x > y? x: y);
    14         System.out.println("max:"+max);
    15         System.out.println("--------");
    16         
    17         //获取三个整数中的最大值
    18         int a = 10;
    19         int b = 30;
    20         int c = 20;
    21         
    22         //分两步:
    23         //A:先比较a,b的最大值
    24         //B:拿a,b的最大值在和c进行比较
    25         int temp = ((a > b)? a: b);
    26         //System.out.println(temp);
    27         int max1 = (temp > c? temp: c);
    28         System.out.println("max1:"+max1);
    29         
    30         //一步搞定
    31         //int max2 = (a > b)?((a > c)? a: c):((b > c)? b: c);
    32         //这种做法不推荐。
    33         //int max2 = a > b?a > c? a: c:b > c? b: c;
    34         //System.out.println("max2:"+max2);
    35         System.out.println("--------");
    36         
    37         //比较两个整数是否相同
    38         int m = 100;
    39         int n = 200;
    40         
    41         //boolean flag = (m == n)? true: false;
    42         boolean flag = (m == n);
    43         System.out.println(flag);
    44     }
    45 }

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

     1 /*
     2     为了让程序的数据更符合开发的数据,我们就加入了键盘录入。
     3     让程序更灵活一下。
     4     
     5     那么,我们如何实现键盘数据的录入呢?
     6         A:导包
     7             格式:
     8                 import java.util.Scanner; 
     9             位置:
    10                 在class上面。
    11         B:创建键盘录入对象
    12             格式:
    13                 Scanner sc = new Scanner(System.in);
    14         C:通过对象获取数据    
    15             格式:
    16                 int x = sc.nextInt();
    17 */
    18 import java.util.Scanner;
    19 
    20 class ScannerDemo {
    21     public static void main(String[] args) {
    22         //创建键盘录入数据对象
    23         Scanner sc = new Scanner(System.in);
    24         
    25         System.out.println("请你输入一个数据:");
    26         int x = sc.nextInt();
    27         
    28         System.out.println("你输入的数据是:"+x);
    29     }
    30 }

    键盘录入练习(一):

    /*
        键盘录入练习:
            键盘录入两个数据,并对这两个数据求和,输出其结果
    */
    import java.util.Scanner;
    
    class ScannerTest {
        public static void main(String[] args) {
            //键盘录入两个数据,并对这两个数据求和,输出其结果
            //创建键盘录入对象
            Scanner sc = new Scanner(System.in);
            
            System.out.println("请输入第一个数据:");
            int x = sc.nextInt();
            
            System.out.println("请输入第二个数据:");
            int y = sc.nextInt();
            
            //把键盘录入的数据进行相加即可
            int sum = (x + y);
            System.out.println("sum:"+sum);
        }
    }

    键盘录入练习(二):

     1 /*
     2     键盘录入练习:键盘录入两个数据,获取这两个数据中的最大值
     3 */
     4 
     5 import java.util.Scanner;
     6 
     7 class ScannerTest2 {
     8     public static void main(String[] args) {
     9         //创建键盘录入对象
    10         Scanner sc = new Scanner(System.in);
    11         
    12         System.out.println("请输入第一个数据:");
    13         int a = sc.nextInt();
    14         
    15         System.out.println("请输入第二个数据:");
    16         int b = sc.nextInt();
    17         
    18         //获取这两个数据中的最大值
    19         int max = (a > b? a: b);
    20         System.out.println("max:"+max);
    21     }
    22 }


    键盘练习(三):

     1 /*
     2     练习:
     3         键盘录入三个数据,获取这三个数据中的最大值
     4         键盘录入两个数据,比较这两个数据是否相等
     5 */
     6 import java.util.Scanner;
     7 
     8 class ScannerTest3 {
     9     public static void main(String[] args) {
    10         //键盘录入三个数据,获取这三个数据中的最大值
    11     
    12         //创建键盘录入对象
    13         Scanner sc = new Scanner(System.in);
    14         
    15         System.out.println("请输入第一个数据:");
    16         int a = sc.nextInt();
    17         
    18         System.out.println("请输入第二个数据:");
    19         int b = sc.nextInt();
    20         
    21         System.out.println("请输入第三个数据:");
    22         int c = sc.nextInt();
    23         
    24         //获取这三个数据中的最大值
    25         int temp = ((a > b)? a: b);
    26         int max = (temp > c? temp : c);
    27         System.out.println("max:"+max);
    28         System.out.println("------------------");
    29         
    30         //键盘录入两个数据
    31         System.out.println("请输入第一个数据:");
    32         int x = sc.nextInt();
    33         
    34         System.out.println("请输入第二个数据:");
    35         int y = sc.nextInt();
    36         
    37         //比较这两个数据是否相等
    38         boolean flag = (x == y);
    39         System.out.println("flag:"+flag);
    40     }
    41 }


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

     1 /*
     2     流程控制语句:可以控制程序的执行流程。
     3     
     4     分类:
     5         顺序结构
     6         选择结构
     7         循环结构
     8         
     9     顺序结构:
    10         从上往下,依次执行。
    11 */
    12 class ShunXuJieGouDemo {
    13     public static void main(String[] args) {
    14         System.out.println("程序开始了");
    15         
    16         System.out.println("我爱Java");
    17         
    18         System.out.println("程序结束了");
    19     }
    20 }

    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         if语句
     4         switch语句
     5         
     6     if语句:
     7         格式1
     8         格式2
     9         格式3
    10         
    11     if语句的格式:
    12         if(比较表达式) {
    13             语句体;
    14         }
    15         
    16         执行流程:
    17             先计算比较表达式的值,看其返回值是true还是false。
    18             如果是true,就执行语句体;
    19             如果是false,就不执行语句体;
    20 */
    21 class IfDemo {
    22     public static void main(String[] args) {
    23         int x = 10;
    24         
    25         if(x == 10) {
    26             System.out.println("x等于10");
    27         }
    28         
    29         if(x == 20) {
    30             System.out.println("x等于20");
    31         }
    32         
    33         System.out.println("over");
    34     }
    35 }

    if语句注意事项:

     1 /*
     2     if语句的注意事项:
     3         A:比较表达式无论简单还是复杂,结果必须是boolean类型
     4         B:if语句控制的语句体如果是一条语句,大括号可以省略;
     5           如果是多条语句,就不能省略。建议永远不要省略。
     6         C:一般来说:有左大括号就没有分号,有分号就没有左大括号
     7 */
     8 class IfDemo2 {
     9     public static void main(String[] args) {
    10         int x = 10;
    11         
    12         if(x == 10) {
    13             System.out.println("x等于10");
    14         }
    15         
    16         if((x > 5) || (x == 10)) {
    17             System.out.println("x大于或者等于10");
    18         }
    19         System.out.println("-------------------");
    20         
    21         int a = 100;
    22         
    23         /*
    24         if(a == 100) {
    25             System.out.println("a的值是100");
    26         }
    27         */
    28         
    29         if(a != 100) {
    30             System.out.println("a的值是100");
    31             System.out.println("over");
    32         }
    33         System.out.println("-------------------");
    34         
    35         int b = 100;
    36         if(b != 100);  //这里其实是有语句体的,只不过是空语句体。
    37         
    38         //代码块
    39         {
    40             System.out.println("b的值是100");
    41             System.out.println("over");
    42         }
    43     }
    44 }

    if语句格式2

     1 /*
     2     if语句格式2:
     3         if(比较表达式) {
     4             语句体1;
     5         }else {
     6             语句体2;
     7         }
     8     执行流程:
     9         首先计算比较表达式的值,看其返回值是true还是false。
    10         如果是true,就执行语句体1;
    11         如果是false,就执行语句体2;
    12         
    13     注意:else后面是没有比较表达式的,只有if后面有。
    14 */
    15 class IfDemo3 {
    16     public static void main(String[] args) {
    17         //判断两个数据是否相等
    18         
    19         int a = 10;
    20         int b = 20;
    21         
    22         if(a == b) {
    23             System.out.println("a等于b");
    24         }else {
    25             System.out.println("a不等于b");
    26         }
    27     }
    28 }

    三元运算符与if格式2的区别:

     1 /*
     2     由于if语句的第二种格式刚才也完成了三元运算符可以完成的效果。
     3     所以,我们就认为他们可以完成一样的操作。
     4     但是,他们就一点区别没有吗?肯定不是。
     5     
     6     区别:
     7         三元运算符实现的,都可以采用if语句实现。反之不成立。
     8         
     9         什么时候if语句实现不能用三元改进呢?
    10             当if语句控制的操作是一个输出语句的时候就不能。
    11             为什么呢?因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出。
    12 */
    13 class IfDemo4 {
    14     public static void main(String[] args) {
    15         //获取两个数据的最大值
    16         int a = 10;
    17         int b = 20;
    18         
    19         //用if语句实现
    20         int max1;
    21         if(a > b) {
    22             max1 = a;
    23         }else {
    24             max1 = b;
    25         }
    26         System.out.println("max1:"+max1);
    27         
    28         //用三元改进
    29         int max2 = (a > b)? a: b;
    30         System.out.println("max2:"+max2);
    31         System.out.println("----------");
    32         
    33         //判断一个数据是奇数还是偶数,并输出是奇数还是偶数
    34         int x = 100;
    35         
    36         if(x%2 == 0) {
    37             System.out.println("100是一个偶数");
    38         }else {
    39             System.out.println("100是一个奇数");
    40         } 
    41         
    42         //用三元改进
    43         //这种改进是错误的。
    44         //String s = (x%2 == 0)?System.out.println("100是一个偶数");:System.out.println("100是一个奇数");;
    45     }
    46 }

    if语句格式3:

     1 /*
     2     由于if语句的第二种格式刚才也完成了三元运算符可以完成的效果。
     3     所以,我们就认为他们可以完成一样的操作。
     4     但是,他们就一点区别没有吗?肯定不是。
     5     
     6     区别:
     7         三元运算符实现的,都可以采用if语句实现。反之不成立。
     8         
     9         什么时候if语句实现不能用三元改进呢?
    10             当if语句控制的操作是一个输出语句的时候就不能。
    11             为什么呢?因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出。
    12 */
    13 class IfDemo4 {
    14     public static void main(String[] args) {
    15         //获取两个数据的最大值
    16         int a = 10;
    17         int b = 20;
    18         
    19         //用if语句实现
    20         int max1;
    21         if(a > b) {
    22             max1 = a;
    23         }else {
    24             max1 = b;
    25         }
    26         System.out.println("max1:"+max1);
    27         
    28         //用三元改进
    29         int max2 = (a > b)? a: b;
    30         System.out.println("max2:"+max2);
    31         System.out.println("----------");
    32         
    33         //判断一个数据是奇数还是偶数,并输出是奇数还是偶数
    34         int x = 100;
    35         
    36         if(x%2 == 0) {
    37             System.out.println("100是一个偶数");
    38         }else {
    39             System.out.println("100是一个奇数");
    40         } 
    41         
    42         //用三元改进
    43         //这种改进是错误的。
    44         //String s = (x%2 == 0)?System.out.println("100是一个偶数");:System.out.println("100是一个奇数");;
    45     }
    46 }

    if语句格式2练习:

     1 /*
     2     if语句格式2的练习:
     3         A:获取两个数据中较大的值
     4         B:判断一个数据是奇数还是偶数,并输出是奇数还是偶数
     5 */
     6 import java.util.Scanner;
     7 
     8 class IfTest {
     9     public static void main(String[] args) {
    10         //创建键盘录入对象
    11         Scanner sc = new Scanner(System.in);
    12         
    13         //获取两个数据中较大的值
    14         System.out.println("请输入第一个数据:");
    15         int a = sc.nextInt();
    16         
    17         System.out.println("请输入第二个数据:");
    18         int b = sc.nextInt();
    19         
    20         //定义一个变量接收最大值
    21         int max;
    22         
    23         if(a > b) {
    24             max = a;
    25         }else {
    26             max = b;
    27         }
    28         
    29         System.out.println("max:"+max);
    30         System.out.println("----------------");
    31         
    32         //判断一个数据是奇数还是偶数
    33         System.out.println("请输入你要判断的数据:");
    34         int x = sc.nextInt();
    35         
    36         if(x%2 == 0) {
    37             System.out.println(x+"这个数据是偶数");
    38         }else {
    39             System.out.println(x+"这个数据是奇数");
    40         }
    41     }
    42 }

    if语句格式3练习:

     1 /*
     2     三种if语句分别适合做什么事情呢?
     3         格式1:适合做单个判断
     4         格式2:适合做两个判断
     5         格式3:适合做多个判断
     6         
     7     需求:
     8         键盘录入x的值,计算出y的并输出。
     9         
    10         x>=3    y = 2x + 1;
    11         -1<=x<3    y = 2x;
    12         x<=-1    y = 2x – 1;
    13         
    14     分析:
    15         A:由于数据要键盘录入,所以必须使用Scanner。
    16         B:由于是三种判断,所以我们选择if语句格式3。
    17 */
    18 import java.util.Scanner;
    19 
    20 class IfTest2 {
    21     public static void main(String[] args) {
    22         //创建键盘录入对象
    23         Scanner sc = new Scanner(System.in);
    24         
    25         System.out.println("请输入x的值:");
    26         int x = sc.nextInt();
    27         
    28         //定义一个y
    29         int y;
    30         
    31         //用if语句格式3进行判断
    32         if(x >= 3) {
    33             y = 2*x + 1;
    34         }else if(x>=-1 && x<3) {
    35             y = 2*x;
    36         }else {
    37             y = 2*x - 1;
    38         }
    39         
    40         System.out.println("y:"+y);
    41     }
    42 }

    键盘录入月份的值,输出对应的季节

      1 /*
      2     键盘录入月份的值,输出对应的季节。
      3     
      4     春    3,4,5
      5     夏    6,7,8
      6     秋    9,10,11
      7     冬    12,1,2
      8     
      9     分析:
     10         A:键盘录入月份的值,所以我们要使用Scanner。
     11         B:我们应该判断这个月份在那个季节,而这个判断情况较多,所以,用if语句格式3。
     12         
     13     if语句的使用场景:
     14         A:针对表达式是一个boolean类型的判断
     15         B:针对一个范围的判断
     16 */
     17 import java.util.Scanner;
     18 
     19 class IfTest3 {
     20     public static void main(String[] args) {
     21         //创建键盘录入对象
     22         Scanner sc = new Scanner(System.in);
     23         
     24         //录入数据
     25         System.out.println("请你输入一个月份:");
     26         int month = sc.nextInt();
     27         
     28         //第三种格式实现即可
     29         if(month<1 || month>12) {
     30             System.out.println("你输入的月份有误");
     31         }else if(month == 1) {
     32             System.out.println("冬季");
     33         }else if(month == 2) {
     34             System.out.println("冬季");
     35         }else if(month == 3) {
     36             System.out.println("春季");
     37         }else if(month == 4) {
     38             System.out.println("春季");
     39         }else if(month == 5) {
     40             System.out.println("春季");
     41         }else if(month == 6) {
     42             System.out.println("夏季");
     43         }else if(month == 7) {
     44             System.out.println("夏季");
     45         }else if(month == 8) {
     46             System.out.println("夏季");
     47         }else if(month == 9) {
     48             System.out.println("秋季");
     49         }else if(month == 10) {
     50             System.out.println("秋季");
     51         }else if(month == 11) {
     52             System.out.println("秋季");
     53         }else {
     54             System.out.println("冬季");
     55         }
     56         System.out.println("--------------");
     57         
     58         //这个程序确实是符合了我们的需求,但是就是看起来比较麻烦
     59         //那么,我们能不能改进一下呢?
     60         //month == 3
     61         //month == 4
     62         //month == 5
     63         //我们发现,上面三个都是春季。
     64         //而他们本身每一个都是一个boolean表达式
     65         //所以,我们就可以考虑使用逻辑运算符给他们连接起来改进
     66         if(month<1 || month>12) {
     67             System.out.println("你输入的月份有误");
     68         }else if(month==3 || month==4 || month==5) {
     69             System.out.println("春季");
     70         }else if(month==6 || month==7 || month==8) {
     71             System.out.println("夏季");
     72         }else if(month==9 || month==10 || month==11) {
     73             System.out.println("秋季");
     74         }else {
     75             System.out.println("冬季");
     76         }
     77         System.out.println("--------------");
     78         
     79         //这个时候,程序代码以及可以了。
     80         //但是呢,假如我要求你输入一个月份,判断是上半年还是下半年。
     81         //这个时候,我们的判断条件连接就是6个boolean表达式
     82         //我们可能还有更多的连接
     83         //这个时候,其实我们还有另外的一种改进方案:
     84         //month == 3
     85         //month == 4
     86         //month == 5
     87         //month>=3 && month<=5
     88         //用范围也是可以改进的。
     89         if(month<1 || month>12) {
     90             System.out.println("你输入的月份有误");
     91         }else if(month>=3 && month<=5) {
     92             System.out.println("春季");
     93         }else if(month>=6 && month<=8) {
     94             System.out.println("夏季");
     95         }else if(month>=9 && month<=11) {
     96             System.out.println("秋季");
     97         }else {
     98             System.out.println("冬季");
     99         }
    100         System.out.println("--------------");
    101     }
    102 }

    获取三个数据中的最大值:

     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 temp = (a>b)? a: b;
    14         //int max = (temp>c)? temp: c;
    15         //System.out.println("max:"+max);
    16         //System.out.println("--------");
    17         
    18         //用if语句实现
    19         int max;
    20         if(a > b) {
    21             if(a > c) {
    22                 max = a;
    23             }else {
    24                 max = c;
    25             }
    26         }else {
    27             if(b > c) {
    28                 max = b;
    29             }else {
    30                 max = c;
    31             }
    32         }
    33         System.out.println("max:"+max);
    34     }
    35 }
  • 相关阅读:
    人月神话读书笔记
    读人月神话有感
    Codeforces 137D
    Codeforces 1138B
    <WFU暑假训练一> 解题报告
    Codeforces 1250B
    Codeforces 1038D
    Codeforces 1202D
    Codeforces 87B
    Codeforces 208C
  • 原文地址:https://www.cnblogs.com/super90/p/4660049.html
Copyright © 2020-2023  润新知