03.01 数据类型中补充的几个小问题
1:在定义Long或者Float类型变量的时候,要加L或者f。
整数默认是int类型,浮点数默认是double。
byte,short在定义的时候,他们接收的其实是一个int类型的值。
2:数据类型转换之默认转换:byte,short,char→int→long→float→double
为什么占用8个字节的long默认转换为4个字节的float?
A:它们底层的存储结构不同。
B:float表示的数据范围比long的范围要大
long:2^63-1
float:3.4*10^38 > 2*10^38 > 2*8^38 = 2*2^3^38 = 2*2^114 > 2^63-1
3:Java语言中的字符char可以存储一个中文汉字吗?为什么呢?
可以。因为java语言中的字符占用两个字节。Java语言采用的是Unicode编码。
03.02 算术运算符的基本用法
运算符:对常量和变量进行操作的符号称为运算符
运算符分为:算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三目运算符6种
算术运算符:+(加)、-(减)、*(乘)、/(除)、%(取余或取模,两个数相除的余数)、+(连接符)、++(自增)、--(自减)
例:
1 int x = 3; 2 int y = 4; 3 System.out.println(x + y); //7 4 System.out.println(x - y); //-1 5 System.out.println(x * y); //12 6 System.out.println(x / y); //0,/获取的是除法操作的商 7 System.out.println(x % y); //3,%获取的是除法操作的余数
注意:整数相除只能得到整数,如果想得到小数,只需把操作的数据中的任意的一个数据变为浮点数即可
如:System.out.println(x * 1.0 / y); //0.75
03.03 算术运算符++和--的用法
例1:单独使用时
1 int x = 3; 2 int y = 4; 3 System.out.println("x="+x+",y="+y); //x=3,y=4 4 x++; 5 --y; 6 System.out.println("x="+x+",y="+y); //x=4,y=3
单独使用时放在操作数据的前面和后面效果一样。也就是a++或者++a效果一样。
例2:参与操作时
1 int x = 3; 2 int y = 4; 3 int a = x++; 4 int b = --y; 5 System.out.println("x="+x+",y="+y); //x=4,y=3 6 System.out.println("a="+a+",b="+b); //a=3,b=3
参与操作时放在操作数的前面:先自增或者自减,再参与操作
放在操作数的后面:先参与操作,再自增或者自减
例3:特殊情况
1 int i = 3; 2 i = i++; 3 System.out.println("i="+i); //i=3
i=i++,先进行i++运算,此时虚拟机会开辟新的空间临时存储i的值,然后进行i++的运算,将运算结果4赋给i,i=4,此时i++运算完成,然后将临时存储的i的值又赋给i,i=3
03.04 算术运算符++和--的练习
1.计算a、b、c的值
1 int a = 10; 2 int b = 10; 3 int c = 10; 4 a = b++; 5 c = --a; 6 b = ++a; 7 a = c--; 8 System.out.println("a="+a); //a=9 9 System.out.println("b="+b); //b=10 10 System.out.println("c="+c); //c=8
2.计算x、y的值
1 int x = 4; 2 int y = (x++)+(++x)+(x*10); //4+6+60 3 System.out.println("x="+x); //x=6 4 System.out.println("y="+y); //y=70
03.05 算术运算符+的多种用法
+的用法:加法、正号、字符串连接符
例:
1 System.out.println(3 + 4); //加法,7 2 System.out.println(+5); //正号,5 3 System.out.println("hello"+'a'+1); //字符串连接符,helloa1
03.06 赋值运算符的基本用法
基本的赋值运算符[=(赋值)]
扩展的赋值运算符[+=(左加)、-=(左减)、*=(左乘)、/=(左除)、%=(左取模)]
例:
1 int y = 10; 2 y += 20; //相当于y = y + 20; 3 System.out.println("y="+y); //y=30
03.07 赋值运算符的面试题
面试题:
short s = 1,s = s+1;
short s = 1,s += 1;
两句代码是否有问题?
short s = 1,s = s+1;有问题,s+1的结果为int型,不能赋值给short 型的s
short s = 1,s += 1;没有问题,s += 1隐含了一个强制类型转换,相当于 s = (short)(s+1);扩展的赋值运算符都有这个特点
03.08 比较运算符的基本用法及其注意事项
比较运算符:==(相等)、!=(不等)、<(小于)、>(大于)、<=(小于等于)、>=(大于等于)
注意:
1.比较运算符运算完的结果必须是true或false
2.比较运算符"=="不能写成"="
03.09 逻辑运算符的基本用法
逻辑运算符:&(与)、|(或)、^(异或)、!(非)、&&(双与)、||(双或)
逻辑运算符用于连接两个boolean类型的表达式
&(与)符号的运算规律:&运算的两边有一个是false结果就是false,只有两边都为true,结果才为true
|(或)符号的运算规律:|运算的两边有一个是true结果就是true,只有两边都为false,结果才为false
^(异或)符号的运算规律:|运算的两边结果相同,结果为false,两边结果不同,结果为true
!(非)符号的运算规律:判断事物的另一面,例:!true=false !false=true
03.10 逻辑运算符&&和&的区别
&&(双与)符号的运算规律:与&(与)符号的运算规律相同
||(双或)符号的运算规律:与|(或)符号的运算规律相同
&(单与)与&&(双与)的区别:
&(单与),不管运算的左边的结果为true或false,都会运算右边的表达式的结果
&&(双与),当运算符左边的结果为false时,不会运算右边表达式的值,因为最终结果为false
|(单或)与||(双或)的区别:
|(单或),不管运算的左边的结果为true或false,都会运算右边的表达式的结果
||(双或),当运算符左边的结果为true时,不会运算右边表达式的值,因为最终结果为true
03.11 位运算符的基本用法1
位运算符:&(与运算)、|(或运算)、^(异或运算)、~(反码)
位运算是直接对二进制进行运算
例:
03.12 位异或运算符的特点
特点:一个数异或同一个数两次,结果还是这个数
03.13 位运算的面试题
不使用第三方变量实现两个整数的互换
方式1
a = a ^ b;
b = a ^ b; // b = a ^ b ^ b = a;
a = a ^ b; // a = a ^ b ^ a = b;
方式2
a = a + b;
b = a - b; // b = a + b - b = a;
a = a - b; // a = a + b - a = b;
方式3
b = (a + b) - (a = b);
03.14 位运算符的基本用法2及面试题
位运算符:<<(左移)、>>(右移)、>>>(无符号右移)
<<(左移):符号位不变,低位补零,每左移一位相当于乘以2
>>(右移):低位溢出,符号位不变,并用符号位补溢出的高位,每右移一位相当于除以2
>>>(无符号右移):低位溢出,高位补零
例:
面试题:用最有效率的方式计算2乘以8的结果
2<<3
03.15 三元运算符的基本用法
格式:(条件表达式)?表达式1:表达式2;
解释:条件表达式的结果为true,运算的结果是表达式1的值
条件表达式的结果为false,运算的结果是表达式2的值
例:
1 int x = 0,y; 2 y = (x > 1)?100:200; 3 System.out.println("y="+y); //y=200
03.16 三元运算符的练习
1.获取两个数中的最大值
1 int x = 100; 2 int y = 200; 3 int max =(x > y)?x:y; 4 System.out.println("max="+max); //max=200
2.获取三个数中的最大值
1 int x = 100; 2 int y = 300; 3 int z = 200; 4 int temp = (x > y)? x : y; 5 int max =(temp > z)?temp : z; 6 System.out.println("max="+max); //max=300
03.17 键盘录入的基本格式讲解
键盘录入数据概述:我们目前在写程序的时候,数据值都是固定的,但是实际开发中,数据值肯定是变化的,所以,准备把数据改进为键盘录入,提高程序的灵活性。
键盘录入数据的步骤:
1.导包:(位置放到class定义的上面)import java.util.Scanner;
2.创建对象:Scanner sc = new Scanner(System.in);
3.接收数据:int x = sc.nextInt();
03.18 键盘录入的练习1
1.键盘录入两个数据,求和
1 import java.util.Scanner; 2 class Demo 3 { 4 public static void main(String[] args) 5 { 6 Scanner sc = new Scanner(System.in); 7 System.out.println("请输入第1个数:"); 8 int x = sc.nextInt(); 9 System.out.println("请输入第2个数:"); 10 int y = sc.nextInt(); 11 System.out.println(x+"+"+y+"="+(x + y)); 12 } 13 }
运行结果:
请输入第1个数: 23 请输入第2个数: 45 23+45=68
2.键盘录入两个数据,求最大值
1 import java.util.Scanner; 2 class Demo 3 { 4 public static void main(String[] args) 5 { 6 Scanner sc = new Scanner(System.in); 7 System.out.println("请输入第1个数:"); 8 int x = sc.nextInt(); 9 System.out.println("请输入第2个数:"); 10 int y = sc.nextInt(); 11 int max = (x > y) ? x : y; 12 System.out.println("最大数是:"+max); 13 } 14 }
运行结果:
请输入第1个数: 45 请输入第2个数: 32 最大数是:45
03.19 键盘录入的练习2
键盘录入三个数据,求最大值
1 import java.util.Scanner; 2 class Demo 3 { 4 public static void main(String[] args) 5 { 6 Scanner sc = new Scanner(System.in); 7 System.out.println("请输入第1个数:"); 8 int x = sc.nextInt(); 9 System.out.println("请输入第2个数:"); 10 int y = sc.nextInt(); 11 System.out.println("请输入第3个数:"); 12 int z = sc.nextInt(); 13 int temp = (x > y) ? x : y; 14 int max = (temp > z) ? temp : z; 15 System.out.println("最大数是:"+max); 16 } 17 }
运行结果:
请输入第1个数: 34 请输入第2个数: 6 请输入第3个数: 4 最大数是:34
03.20 顺序结构语句
流程控制语句分类:顺序结构、选择结构、循环结构
顺序结构概述:是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
总的来说:写在前面的先执行,写在后面的后执行
流程图:
03.21 选择结构if语句格式1
选择结构也被称为分支结构。
选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
Java语言提供了两种选择结构语句
if语句和switch语句
if语句第1种格式:
if(关系表达式)
{
语句体;
}
执行流程:首先判断关系表达式看其结果是true还是false,如果是true就执行语句体,如果是false就不执行语句体
流程图:
例:
1 int x = 3; 2 if(x > 1) 3 { 4 System.out.println("yes"); 5 } 6 System.out.println("over");
03.22 选择结构if语句注意事项
注意事项:
1.关系表达式无论简单还是复杂,结果必须是boolean类型
2.当if控制的语句是单条语句时,if的控制范围{ }可以省略,当if的{ }省略时,if只能控制离他最近的单条语句
当if控制的语句不是单条语句时,if的{ }不能省略。建议永远不要省略。
3.如果在if(条件表达式)后加了;表示没有执行语句的判断结构,if不会控制下面的语句,无论if的条件是true还是false,下面的语句都会执行
03.23 选择结构if语句格式2
if语句第1种格式:
if(关系表达式)
{
语句体1;
}
else
{
语句体2;
}
执行流程:首先判断关系表达式看其结果是true还是false,如果是true就执行语句体1,如果是false就执行语句体2
流程图:
例:
1 int a = 3,b; 2 if(a > 1) 3 { 4 b = 100; 5 } 6 else 7 { 8 b = 200; 9 } 10 System.out.println("b="+b); //b=100
03.24 选择结构if语句格式2的练习
判断一个数是奇数还是偶数
1 int a = 23; 2 if(a % 2 == 0) 3 { 4 System.out.println(a+"是偶数"); 5 } 6 else 7 { 8 System.out.println(a+"是奇数"); 9 }
运行结果:23是奇数
03.25 if语句的格式2和三元的相互转换问题
三元运算符其实就是if else的简写格式,if else 是通用格式
当if else运算后有一个具体的结果时,可以简化写成三元运算符
当if else语句控制的语句体是一条输出语句的时候,就不能写成三元运算符。因为三元运算符是一个运算符,必须要求有一个结果返回。而输出语句却不能作为一个返回结果。
03.26 选择结构if语句格式3
if语句第3种格式:
if(关系表达式1)
{
语句体1;
}
else if(关系表达式2)
{
语句体2;
}
......
else
{
语句体n+1;
}
执行流程
首先判断关系表达式1看其结果是true还是false
如果是true就执行语句体1
如果是false就继续判断关系表达式2看其结果是true还是false
如果是true就执行语句体2
如果是false就继续判断关系表达式...看其结果是true还是false
...
如果没有任何关系表达式为true,就执行语句体n+1。
流程图:
例:
1 import java.util.Scanner; 2 class Demo 3 { 4 public static void main(String[] args) 5 { 6 Scanner sc = new Scanner(System.in); 7 System.out.println("请输入一个成绩:"); 8 int score = sc.nextInt(); 9 if(score < 0 || score > 100) 10 { 11 System.out.println("数据错误"); 12 } 13 else if(score >= 90) 14 { 15 System.out.println(score+"对应等级A"); 16 } 17 else if(score >= 80) 18 { 19 System.out.println(score+"对应等级B"); 20 } 21 else if(score >= 70) 22 { 23 System.out.println(score+"对应等级C"); 24 } 25 else if(score >= 60) 26 { 27 System.out.println(score+"对应等级D"); 28 } 29 else 30 { 31 System.out.println(score+"对应等级E"); 32 } 33 } 34 }
03.27 选择结构if语句格式3的练习
键盘录入x的值,计算出y的并输出
x和y的关系满足如下:
x>=3 y = 2x + 1;
-1<=x<3 y = 2x;
x<=-1 y = 2x - 1;
1 import java.util.Scanner; 2 class Demo 3 { 4 public static void main(String[] args) 5 { 6 int y = 0; 7 Scanner sc = new Scanner(System.in); 8 System.out.println("请输入一个数:"); 9 int x = sc.nextInt(); 10 if(x >= 3) 11 { 12 y = 2 * x + 1; 13 System.out.println("y=2*"+x+"+1="+y); 14 } 15 else if(x >= -1 && x < 3) 16 { 17 y = 2 * x; 18 System.out.println("y=2*"+x+"="+y); 19 } 20 else 21 { 22 y = 2 * x - 1; 23 System.out.println("y=2*"+x+"-1="+y); 24 } 25 } 26 }
03.28 选择结构if语句格式3的练习
键盘录入月份的值,输出对应的季节
春(3,4,5)、夏(6,7,8)、秋(9,10,11)、冬(12,1,2)
1 import java.util.Scanner; 2 class Demo 3 { 4 public static void main(String[] args) 5 { 6 Scanner sc = new Scanner(System.in); 7 System.out.println("请输入一个月份:"); 8 int month = sc.nextInt(); 9 if(month > 12 || month < 1) 10 { 11 System.out.println("输入的月份有误"); 12 } 13 else if(month >= 3 && month <= 5) 14 { 15 System.out.println(month+"月对应春季"); 16 } 17 else if(month >= 6 && month <= 8) 18 { 19 System.out.println(month+"月对应夏季"); 20 } 21 else if(month >= 9 && month <= 11) 22 { 23 System.out.println(month+"月对应秋季"); 24 } 25 else 26 { 27 System.out.println(month+"月对应冬季"); 28 } 29 } 30 }
if语句的使用场景:
1.针对表达式是一个boolean类型的判断
2.针对一个范围的判断
03.29 选择结构if语句的嵌套使用
例:
1 int a = 10; 2 int b = 30; 3 int c = 20; 4 int max; 5 if(a > b) 6 { 7 if(a > c) 8 { 9 max = a; 10 } 11 else 12 { 13 max = c; 14 } 15 } 16 else 17 { 18 if(b > c) 19 { 20 max = b; 21 } 22 else 23 { 24 max = c; 25 } 26 } 27 System.out.println("max:"+max);