目录
一、类型转换
1、自动类型转换
类型范围小的变量可以直接赋值给类型范围大的。
byte a = 20;
int b = a; //发生了自动类型转换
注意:byte、short、char在运算中是当成int型参与计算
2、表达式的自动类型转换
byte c = 10;
int d = 20;
double e = 2.1;
double h = c + d; //表达式自动转换类型为double类型,占字节数最多
System.out.println(h);
//面试题
byte a1 = 100;
byte a2 = 120;
int a3 = a1 + a2;
//要求输入a3的类型,byte型数据在运算中是当作整型运算,因为两个byte型相加可能会超过byte的范围
System.out.println(a3);
3、强制类型转换
类型范围大的数据或者变量,不能直接赋值给类型范围小的变量,会报错。
通过强制类型转换可以将类型范围大的变量、数据赋值给类型范围小的变量。
double b;
int a = (int)b;
强制类型转换可能造成数据(丢失)溢出
二、运算符
1、基本运算符
对字面量或者变量进行操作的符号。
System.out.println(3 / 2); //默认为整型输出,强制为浮点型输出只需要 3*1.0/2
System.out.println(3 * 1.0 / 2);
+符号在java中还可以用作连接符:
- 与字符串作+运算时会被当成连接符,其结果还是字符串。
- 能算则算,不能算就连在一起
int a = 5;
System.out.println("abc" + "a"); //abca
System.out.println("abc" + a); //abc5
System.out.println(5 + a); //10,能算则算
System.out.println("abc" + 5 + 'a'); //abc5a
System.out.println(15 + "abc" + 15); //15abc15
System.out.println(a + 'a'); //102
System.out.println(a + 'a' + "abc"); //102abc
2、自增、自减运算符
注意事项:
++在前,表示先加一操作,取加一后的值进行运算;
++在后,表示先拿变量值作运算,再将变量加一;
面试题:
int k = 3;
int p = 5;
//k 3 4 5 4
//p 5 4 3 4
//rs 3 + 5 - 4 + 4 - 5 + 4 + 2
int rs = k++ + ++k - --p + p-- - k-- + ++p + 2;
System.out.println(k); //4
System.out.println(p); //4
System.out.println(rs); //9
3、赋值运算符
4、关系运算符
5、逻辑运算符
&真 (都真为真),| 假 (都假为假),^逻辑异或(相同为假,不同为真)
短路逻辑运算符
&&优先级大于||
6、三元运算符
格式: 条件表达式 ?值1:值2
//求最大值
int max = a > b ? a : b;
三元运算符的嵌套,求三个数的最大值
max = a>b?a>c?a:c:b>c?b:c;
//加上括号后更容易理解
max = a>b?(a>c?a:c):(b>c?b:c);
7、键盘录入案例、API
API是什么:
- Application Programming Interface,应用程序编程接口
- 就是java写好的程序,可以直接调用
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
//得到键盘扫描器对象
Scanner sc = new Scanner(System.in);
System.out.print("请您输入年龄:");
//调用sc对象的功能,等待接受用户输入的数据
//sc.nextInt() 他会等待用户输入数据,直到用户输入完数据并回车就会把数据拿到,用age接收
int age = sc.nextInt();
System.out.println("您的年龄是" + age);
System.out.print("您的名称是:");
String name = sc.next();
System.out.println("您的名字是" + name);
}
}
三、流程控制语句
1、分支结构
1.1、if分支
根据判定结果决定执行某个代码
1.2、switch分支
if、switch适用场景:
- if在功能上远远强大于switch
- if适合做区间匹配
- switch适合做:值匹配的分支选择、代码优雅
switch注意事项:
- 表达式类型只能是byte、int、char、short,枚举、String,不支持double、float、long。
- case 值不允许重复。
- 正常的case后的break不要忘记,否则出现穿透现象。
switch的穿透性:
存在多个case分支的功能代码是一样的时,可以用穿透性把流程集中到同一处处理,这样可以简化代码。
2、循环结构
2.1、for循环
快速生成for循环 : fori
求1-10的偶数和
int sum = 0;
for (int i = 1; i <= 10; i++) { //也可以直接将i++写成i+=1
if(i % 2 == 0) {
sum += i;
}
}
System.out.println(sum);
求水仙花数:
int i, count = 0;
for (i = 100; i < 1000; i++) {
//个位
int ge = i % 10;
//十位 i/10%10
int shi = i / 10 % 10;
//百位 i/100
int bai = i / 100;
if (i == (ge * ge * ge + shi * shi * shi + bai * bai * bai)) {
//将数据不换行输出,并且数据间由空格,\t表示一个空格
System.out.print(i + "\t");
count++;
}
}
System.out.println(); //使下一个数据换行输出
System.out.println(count);
2.2、while循环
- 当型循环,当满足条件时执行循环
for与while的区别:
- 功能上是完全一样的,for能解决的while也能解决。
- 使用规范:直到循环次数用for,不知道循环次数用while。
2.3、do-while循环
- 直到型循环
循环体一定会执行一次。
2.4、三种循环的区别
2.5 死循环及强制退出死循环
注意死循环中不能从键盘输入浮点型数据,因为第一次没有接到这个数据,死循环就会一直接,直接报错。
案例:用户输入密码,直到输入正确跳出循环,输出密码正确,否则输出密码错误。
public class LoopText2 {
public static void main(String[] args) {
//输入密码,输入正确进入,程序并关闭,错误,提示密码错误
int psd = 123;
Scanner sc = new Scanner(System.in);
while (true)
{
System.out.print("请输入密码:");
int userpsd = sc.nextInt();
if (userpsd == psd) {
System.out.println("密码正确,欢迎使用");
break;
}
System.out.println("密码错误,请重新输入");
}
}
}
强制退出死循环:
OUT:
while(true) {
...
语句1;
//强制退出死循环
break OUT;
...
}
2.6、嵌套循环
打印***** 图案
*****
*****
*****
public class LoopDemo {
public static void main(String[] args) {
//嵌套循环
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 5; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
2.7、跳转控制语句
3、随机数Random
import java.util.Random;
public class RandomDemo {
public static void main(String[] args) {
//Rabdom 随机数
//创建随机数对象
Random r = new Random();
//调用nextInt()方法返回随机数
int data = r.nextInt(10);
System.out.println(data);
}
}
Random提供的 nextInt(n)功能只能生成:0 -(n-1)之间的随机数。
要想生成其他范围的随机数,通过减加法实现:
r.nextInt(10) + 1 // 范围1 - 10 -->(0~9)+1 --> 1~10
案例:猜数字游戏
import java.util.Random;
import java.util.Scanner;
public class RandomText {
public static void main(String[] args) {
//新建键盘录入对象
Scanner sc = new Scanner(System.in);
//新建随机数对象
Random r = new Random();
//生成1~100的随机数
int num = r.nextInt(100) + 1;
//建立死循环
while (true) {
System.out.print("请您猜猜数字是多少:");
//新建键盘录入接收对象
int userNum = sc.nextInt();
if(userNum < num){
System.out.println("您猜的数字过小");
}
else if(userNum == num) {
System.out.println("恭喜猜中");
break;
}
else {
System.out.println("您猜的数字过大");
}
}
}
}