运算符与分支流程控制

运算符

运算符的概念

执行特定的数学或逻辑等操作的符号

算数运算符

四则运算是最常见的数学运算,运算规则与数学中的数学运算基本一样,也有一些细微的区别

整数除法得到整数结果(无论是否可以被整除)!

/**
* 算术四则运算
*/
public class ArithmeticDemo {
public static void main(String[] args) {
//一般情况
int a = 50;
int b = 100;
System.out.println(a+b);//整数加上整数,结果也是整数

a = Integer.MAX_VALUE;
b =1;
System.out.println(a+b); //溢出 -2147483648

//解决溢出问题 采用更大表示范围的类型来接收计算结果
//两个int类型的变量计算的结果还是int 计算完成后再转成long 还是会溢出
//解决办法是 将其中一个int强转成long
long l = (long) a + b ;
System.out.println(l);

//整除
a = 9;
b =2 ;
System.out.println(a /2 );

//浮点数除法
double d = (double) a / b;
System.out.println(d);

//byte short char 在运算过程中会自动转换为 int 类型
byte b1 = 5;
short s1 =6;
short s2 = (short) (b1 + s1);

byte b2 = 3 + 100; //3是字面量int类型 100字面量也是int类型 结果没有超过byte的范围 允许赋值
byte b3 = (byte) (100 + 100); //出现错误 两个数的和超过了byte的表示范围 必须强转
}
}
/**
* 自增(++) 自减(--)
*/

public class IncrementDemo {
public static void main(String[] args) {
int i = 1 ;
System.out.println(i++);// 1
System.out.println(i); //2

i = 1;
System.out.println(++i); //2
System.out.println(i);//2

i =1;
System.out.println(i--);//1
System.out.println(i); //0

i =1 ;
System.out.println(--i); //0
System.out.println(i);
}
}

关系运算符

关系运算符用于比较数值的大、小、相等关系

关系运算结果是 boolean 类型数据

关系成立则为true 不成立则为false

== != > >= < <=


/**
* 关系运算符 判断两个数的大小关系
*/
public class RelationalDemo {
public static void main(String[] args) {
int age = 5;
System.out.println(age > 12); //false
System.out.println(age >= 12); //false
System.out.println(age < 12); //true
System.out.println(age <= 12);//true
System.out.println(age == 5); //true
System.out.println(age != 5); //false
}
}

逻辑运算符

参与逻辑运算的变量或表达式都是boolean类型,运算结果也是boolean类型

运算符有三种 逻辑与&& 逻辑或|| 逻辑非 !

[案列] 闰年判断

/**
* 判断一个年份是否是闰年
*/

public class LogicalDemo1 {
public static void main(String[] args) {
//创建组件对象
Scanner console = new Scanner(System.in);
System.out.println("请输入年份:");
int year = console.nextInt();
boolean b = (year % 4 == 0 && year % 100 != 0) ||(year % 400 == 0);
System.out.println(b);
}
}
短路逻辑运算

在进行两元逻辑运算时,如果能够通过第一个表达式得到整体运算结果,就不再运算第二个表达式

java的两元逻辑运算符 && 和 || 都按照短路规则执行.

短路运算规格的优点

  1. 可以减少运算次数提高程序性能
  2. 利用第一个表达式运算结果跳过第二个表达式,避免第二个表达式的运算错误
/**
* 短路&&和||
*/

public class LogicalDemo2 {
public static void main(String[] args) {
int i = 10;
boolean b = i >100 && i++>100;
System.out.println(b); //false
System.out.println(i); //10 使用的是短路与 第二个关系运算没有执行

boolean b2 = i <100 && i++ <100;
System.out.println(b2); //true
System.out.println(i); //11 第一个条件满足 会执行第二个条件

boolean b3 = i< 100 || i++ <100;
System.out.println(b3); //true
System.out.println(i); //11 短路或 第一个条件满足 第二个条件短路 不会执行

boolean b4 = i >100 || i++ <100;
System.out.println(b4); //true
System.out.println(i); // 12 第一个条件不满足 会执行第二个条件

}
}

赋值运算符

基本的赋值运算符是”=”

/**
* 赋值运算符
*/

public class AssignmentDemo2 {
public static void main(String[] args) {
int a,b,c,d;
a=b=c=d=20;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);

}
}

复合运算符

复合赋值运算可以自动执行强制类型转换

/**
* 复合赋值运算:+=\-=\/=\%=
*/
public class AssignmentDemo3 {
public static void main(String[] args) {
int i = 1;
i +=5; // i= i+5
System.out.println(i);

i = 10;
i -= 5; // i= i - 5;
System.out.println(i);

//自动执行强制类型转换
i += 5.5; //

// i = (int) (i + 5.5);
System.out.println(i);
}
}

字符串连接运算符

字符串连接运算就是将两个字符串连接为一个新的字符串

java字符串连接使用”+”实现

/**
* 字符串连接 +
*/
public class StringDemo {
public static void main(String[] args) {
System.out.println(5 + 5.5);
System.out.println("5"+5.5);//"55.5"
int i = 10;
System.out.println("i加10的和是:"+ (i + 10)); //使用括号改变优先级
}
}

三元运算符

三元/目运算符也称为”条件运算符”或者”条件表达式”

boolean表达式 ? 表达式1 : 表达式2


import java.util.Scanner;

/**
* 三目运算符
*/
public class TernaryDemo {
public static void main(String[] args) {
/**
* 运算符结构
* boolean 表达式 ? 表达式1 : 表达式2
* 先执行boolean表达式 如果为true -> 表达式1
* 如果为false -> 表达式2
*/
//键盘输入两个数字 选出最大值
Scanner console = new Scanner(System.in);
System.out.println("请输入两个数字");
int a = console.nextInt();
int b = console.nextInt();
int max = a > b ? a : b;
System.out.println(max);

}
}

分支流程控制

if语句

if单路分支流程控制

import java.util.Scanner;

/**
* if单路分支
* 输入商品的总价
* 如果总价满足不小于500 八折优惠
* 最初付款金额
*/
public class IfDemo01 {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
System.out.println("请输入商品总价:");
double total = console.nextDouble();
System.out.println("原价是"+total);
if (total >= 500){
total *= 0.8; // total = total * 0.8;
}
System.out.println("实付款:"+total);
}
}

if else 双路分支语句
import java.util.Scanner;

/**
* if单路分支
* 输入商品的总价
* 如果总价满足不小于500 八折优惠
* 最初付款金额
*/
public class IfDemo01 {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
System.out.println("请输入商品总价:");
double total = console.nextDouble();
System.out.println("原价是"+total);
if (total >= 500){
total *= 0.8; // total = total * 0.8;
}
System.out.println("实付款:"+total);
}
}
if else if 多路分支语句
import java.util.Scanner;

/**
* 输入商品总价
* 根据不同价位进行折扣计算
* 输出付款金额
* 如果总价 >=800 七折优惠
* 总价>500 <800 八折优惠
* 总价>200 <500 九折优惠
* 总价 >0 <200 九五折优惠
*/

public class IfDemo3 {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
System.out.println("输入总金额");
double total = console.nextDouble();
if (total > 0) {
System.out.println("总价是"+total);
if (total >= 800) {
total *= 0.7;
} else if (total >= 500) {
total *= 0.8;
} else if (total >= 200) {
total *= 0.9;
} else {
total *= 0.95;
}
System.out.println("实付金额:"+total);
} else {
System.out.println("输入有误");
}
}

}

switch语句

switch case 是java的一种多路分支语句,可以根据整数、字符串、枚举类进行分支

switch case语句

整数判断建议使用Switch 效率高

程序从满足条件处切入进来,到执行到break结束

import java.util.Scanner;

/**
* switch case 多路分支
*/
public class SwitchDemo01 {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
System.out.println("输入分数:");
int score = console.nextInt();
switch (score/10){
case 10:
case 9:
System.out.println("A");
break;
case 8:
System.out.println("B");
break;
case 7:
case 6:
System.out.println("C");
break;
default:
System.out.println("D");
}
}
}
java新特性-Switch表达式

import java.util.Scanner;

/**
* java新特性 switch表达式
*/
public class SwitchDemo02 {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
System.out.println("请输入分数");
int score = console.nextInt();
switch (score/10){
case 10,9 -> System.out.println("A");
case 8 -> System.out.println("B");
case 7,6 -> System.out.println("C");
default -> System.out.println("D");
}
}
}