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 }