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 }

 

posted on 2015-07-19 22:51  super90  阅读(394)  评论(0编辑  收藏  举报

导航