引出
编程语言用于处理数据,有算术运算符,逻辑运算符,位运算符,还有一种三元运算符
- 数学运算符:要进行数学运算(+,-,*,/,%【取余】,++,—),先乘除后加减,有()先算(),++和—看位置和是否赋值
- 赋值运算符:将结果或者值赋值给变量(=,+=,-+,*=,/=,%=)
- 比较运算符:比较内容(>,<,>=,<=,!=,==)结果都是boolean,如果比较的是字符串,用equals比较
- 逻辑运算符:连接比较运算符的(&&,||,!),短路效应【&和|可以为一个符号,一个符号代表相同含义,但是不具备短路效应】
- 三元运算符:根据结果执行不同的内容(?:),?前表示要判定的条件,:前是结果为true时得到的结果,:后是结果为false时得到的结果
〇、Scanner的使用
重点:控制台键盘输入
创建Scanner工具,可以扫描控制台的键盘输入
1.入门代码
String username = scanner.nextLine(); // 是以换行作为结束标志的,产生程序的阻塞,停止不动,卡住
import java.util.Scanner;
public class Demo5 {
public static void main(String[] args) {
// 重点:控制台键盘输入
// 创建Scanner工具,可以扫描控制台的键盘输入
// Scanner scanner = new Scanner(System.in); // 不断扫描控制台的输入
// System.out.println("请输入用户名:");
// String username = scanner.nextLine(); // 是以换行作为结束标志的,产生程序的阻塞,停止不动,卡住
//
// System.out.println("请输入密码:");
// String password = scanner.nextLine(); // 是以换行作为结束标志的,产生程序的阻塞,停止不动,卡住
// // 综合案例:模拟登陆(账号:admin,密码123)
// if("admin".equals(username) && "123".equals(password)) {
// System.out.println("用户登陆成功");
// }else {
// System.out.println("用户名或密码错误");
// }
int i = 0;
while (true) {
System.out.println(i++);
Scanner scanner = new Scanner(System.in); // 不断扫描控制台的输入
System.out.println("请输入用户名:");
String username = scanner.nextLine(); // 是以换行作为结束标志的,产生程序的阻塞,停止不动,卡住
System.out.println("请输入密码:");
String password = scanner.nextLine(); // 是以换行作为结束标志的,产生程序的阻塞,停止不动,卡住
if("admin".equals(username) && "123".equals(password)) {
System.out.println("用户登陆成功");
break;
}else {
System.out.println("请重新输入");
}
}
}
}
2.scanner用try… catch
import java.util.Scanner;
import java.util.InputMismatchException;
public class Test3 {
public static void main(String[] args) {
// 1. Scannner相关处理
Scanner scanner = new Scanner(System.in);
/\*
\* java.util.InputMismatchException
\* 产生 :Scanner使用时产生;
\* 解决:异常处理机制——异常捕获
\* try {
\* // 可能会出现异常的代码
\* }catch{
\* }
\* 捕获异常的作用:
\* 1.当程序异常时,可以根据异常的类型做出不同的处理;
\* 2.保证程序在处理完异常后可以继续执行后面的程序,而不是中断程序;
\*/
// 测试问题
System.out.println("请输入一个数:");
int num = 0; //变量要赋初始值
while(true) {
try {
// scanner.nextInt()报错时,会进入catch循环
num = scanner.nextInt(); // 阻塞 , 局部变量
System.out.println("数据为" + num);
break; //输入正确,跳出循环
}catch(InputMismatchException e) {
System.out.println("您输入的不是一个整数");
scanner.nextLine(); // 解决进入死循环
}
}
System.out.println("数据"+num);
System.out.println("程序接下来的代码");
// 释放资源
scanner.close();
}
}
一、数字运算符
1.加法
字符串的拼接:
System.out.println(x+"+"+ y +"="+(x+y)
2.除法: / 默认对商取整
获取结果为小数的方法:i*1.0/j
//保留小数位数的方法:
double agv3 = agv\*100 + 0.5;
int agv4 = (int)(agv\*100+0.5);
double agvResult = agv4\*1.0 / 100;
System.out.println(agvResult);
3.取余数:%
获取个十百位数
案例:加减乘除,判断奇偶,保留位数
/\*算数运算符
\*
\*/
public class Demo1 {
public static void main(String[] args) {
// 1. 加法,数字加法,字符串拼接
int x = 3;
int y = 5;
int result = x+y;
System.out.println(x + "+" + y + "=" + result);
System.out.println(x + "+" + y + "=" + (x+y));
// 2.除法 / 默认对商取整
double a = 1.23;
System.out.println((int)a);
int i = 10;
int j = 3;
System.out.println(i/j);
System.out.println(i\*1.0/j);
// 求平均数
int score1 = 97;
int score2 = 64;
int score3 = 90;
double agv = (score1 + score2 + score3)\*1.0/3;
System.out.println(agv);
// 2.1.保留两位小数;
// agv\*100 = 8366.66667
// agv\*100+0.5 = 8367.16666
// (int)(agv\*100+0.5)
// double s = 8367\*1.0/100
// 2.2.保留三位小数;
double agv3 = agv\*100 + 0.5;
int agv4 = (int)(agv\*100+0.5);
double agvResult = agv4\*1.0 / 100;
System.out.println(agvResult);
// 3.求余数,% 取模
// 3.1获取进制位,获取百位
int num = 123;
int bai = num/100; // 123/100 = (int)1.23 = 1
int shi = num/10%10; // 123/10 = 12 % 10 = 2
int ge = num%10; // 123%10 = 3
// 3.2判断一个数是否是奇数还是偶数;
int num3 = 10;
if(num3%2 == 0) {
System.out.print("unm是偶数");
}else {
System.out.print("num是奇数");
}
// 4.自增自减运算符 i++ i-- ++i --i
}
}
4.自增运算符:i++,++i
i++: 先使用i参与运算,运算结束后再+1;
++i: 先将i自增1,然后参与运算
int i = 1;
i++ \* 10//:结果为10,i为2;
++i \* 10//:结果为20,i为2;
// 4.自增自减运算符 i++ i-- ++i --i
public class Demo2 {
public static void main(String[] args) {
int i = 1;
// 情形1:单独使用时,下面等效
// i = i + 1;
// i += 1;
// i++;
// ++i;
// 情形2:当++ 参与运算符
/\*
\* i++: 先使用i参与运算,运算结束后再+1;
\* ++i: 先将i自增1,然后参与运算
\*/
System.out.println(i++ \*10); // 结果为10,i的值为2
// System.out.println(++i\*10); // 结果为20,i的值为2
}
}
二、逻辑运算符
1.或|
// 短路或, 表达式1 || 表达式2:当表达式1的结果为true,表达式2不会执行
System.out.println(5>3 || 10/0 > 4);
2.与 &
// && 短路与,表达式1 && 表达式2【当表达式1的结果为false,表达式2不会执行】
System.out.println(5<4 && 10/5 > 2)
3.非!
boolean removeFlag = true;
if (!removeFlag) {}
案例:与或非,短路
/\*逻辑运算
\* 或 | 与& 非!
\*/
public class Demo4 {
public static void main(String[] args) {
// 1.或 | 只要有一个成立,结果就是true
System.out.println(3>5 | 6>5);
// 短路或, 表达式1 || 表达式2【当表达式1的结果为true,表达式2不会执行
System.out.println(5>3 || 10/0 > 4);
// 2.与 & 两个表达式都成立时才为true
System.out.println(3>5 & 5>4);
// && 短路与,表达式1 && 表达式2【当表达式1的结果为false,表达式2不会执行】
System.out.println(3>5 && 5/0>4);
// 3.非 ! 非真即假,非假即真
boolean flag = true;
flag = !flag; // 取反操作
}
}
4.==等于
public class Demo3 {
public static void main(String[] args) {
// 对于基本数据类型,只会比较数值
System.out.println(1==1.0);
String s = "1"+"2"+"3";
String s1 = "12"+""+"3";
String s2 = "123";
System.out.println(s==s1); // true
System.out.println(s1==s2); // true
String ss = "上海";
String ss1 = "2020";
String ss3 = ss + ss1; // 当出现两个变量拼接时会导致地址的变化
String ss4 = "上海2020";
System.out.println(ss4==ss3);
System.out.println(ss3.equals(ss4)); // 比较两个变量的值是否相等
}
}
案例:判断闰年,验证登陆
/\*逻辑运算
\* 或 | 与& 非!
\*/
public class Demo4 {
public static void main(String[] args) {
/\*
\* // 综合案例: 判断是否为润年
\* 闰年:四年一润,百年不润,四百年再润
\* 能被4整除,不能被100整除,能被400整除
\*year%4 == 0;year%100 != 0;year%400 ==0;
\*/
int year = 2020;
if(year%4 == 0 && year%400 != 0 || year%400 == 0) {
System.out.println(year + "是闰年");
}else {
System.out.println(year + "是平年");
}
// 综合案例:模拟登陆(账号:admin,密码123)
String username = "admin";
String password = "123";
if("admin".equals(username)) {
System.out.println("用户登陆成功");
}else {
System.out.println("用户名或密码错误");
}
}
}
三、位运算符
1.左移和右移 >>
重点(能够实现高效运算)
num >> n //:num/2的n次方
2.异或 ^
不同为true,相同为false:简单的加密算法