Java基础(3)——算术 | 逻辑 | 位运算符,三元运算符 & Scanner使用

在这里插入图片描述

引出

编程语言用于处理数据,有算术运算符,逻辑运算符,位运算符,还有一种三元运算符

  • 数学运算符:要进行数学运算(+,-,*,/,%【取余】,++,—),先乘除后加减,有()先算(),++和—看位置和是否赋值
  • 赋值运算符:将结果或者值赋值给变量(=,+=,-+,*=,/=,%=)
  • 比较运算符:比较内容(>,<,>=,<=,!=,==)结果都是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:简单的加密算法

x^y=z z^x→y z^y→x

		int a = 10;
		int b = 666;
		int mv = a ^ b;
		// 解密的密文
		int result = mv ^ a;
		System.out.println(result);

案例:左移右移,加密


public class Teat1 {
	public static void main(String[] args) {
		// 按位与 或 3 & 5
		// 异或 ^ 不同为true,相同为false
		// 简单的加密算法:x^y=z z^x→y z^y→x
		int a = 10;
		int b = 666;
		int mv = a ^ b;
		// 解密的密文
		int result = mv ^ a;
		System.out.println(result);
		
		// 左移和右移 >>
		// 重点(能够实现高效运算):num >> n :num/2的n次方
		System.out.println(16 >> 2);
	}

}

三.三元运算符

? :
在这里插入图片描述

  • 三元运算符 表达式?结果1:结果2
  • 执行流程:成立返回1,不成立返回2
// 3.1 三个数的最大值
// 三元运算符,ab 比较,将ab比较的结果再和c比较
int a = 10;
int b = 20;
int c = 30;
int max = a > b ? a : b;
max = max > c ? max : c;
System.out.println(max);

如何交换两个变量的数据

// 面试点:如何交换两个变量的数据
int x = 10;
int y = 20;
int temp = x; //声明第三个变量存放任意一个变量值;

System.out.println("x=" + x + ",y=" + y);
x = y;
y = temp;
System.out.println("交换后的x=" + x + ",y=" + y);

案例:三元运算符案例

import java.util.Scanner;
/*单分支
 * if(){
 * }else{
 * }
 * 
*/
public class Test1 {
	public static void main(String[] args) {
		// 1.判断一个数是否为奇数
//		int num = 10;
		System.out.println("请输入一个数");
		Scanner scanner = new Scanner(System.in);
		int num = scanner.nextInt(); // 程序等待键盘的输入,直到按了回车才继续向下
		if(num % 2 == 0) {
			System.out.println(num + "为偶数");
		}else {
			System.out.println(num + "为奇数");
		}
		
		// 2.使用三元运算符简化分支if…else
		/*
		 * 三元运算符 表达式?结果1:结果2
		 * 执行流程:成立返回1,不成立返回2
		 */
		String result = num % 2 == 0 ? "偶数" : "奇数";
		System.out.println(num + "是" + result);
		
		// 3.最值判断(最大值,最小值)
		int a = 10;
		int b = 20;
		// 找出a,b中的最大值
		if(a > b) {
			System.out.println("最大值是"+"a");
		}else {
			System.out.println("最大值为"+"b");
		}
		// 三元运算符
		int max = a > b ? a : b;
		System.out.println(max);
		
		scanner.close(); // 关掉scanner
	}
}


总结

0.scanner的使用,最好用nextline;
1.普通除/,乘以1.0实现结果为小数;
2.与或用 && 和 || 短路运算符;
3.三元运算符;
4.如何交换两个变量的值;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arya's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值