荐 Java学习之路-day-02运算符&分支语句
Java 运算符&分支语句
每日一句
夫祸患常积于忽微,而智勇多困于所溺,岂独伶人也哉?
评语:祸患常常是由一点一滴极小的不良细节积累而酿成的,纵使是聪明有才能的和英勇果敢的人也多半沉溺于某种不良的嗜好中,受其迷惑而陷于困顿。
1. 运算符
1.1 算术运算符
(1) 运算符和表达式
运算符:对常量或者变量进行操作的符号
表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。
不同运算符连接的表达式体现的是不同类型的表达式。
举例说明:
int a = 10;
int b = 20;
int c = a + b;
+:是运算符,并且是算术运算符。
a + b:是表达式,由于+是算术运算符,所以这个表达式叫算术表达式。
(2) 算术运算符
注意:
/和%的区别:两个数据做除法,/取结果的商,%取结果的余数。
整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。
int a = 10;
int b = 3;
System.out.println(a / b); // 输出结果3
System.out.println(a % b); // 输出结果1
(3) 字符的“+”操作
char类型参与算术运算,使用的是计算机底层对应的十进制数值。需要我们记住三个字符对应的数值:
‘a’ – 97 a-z是连续的,所以’b’对应的数值是98,'c’是99,依次递加
‘A’ – 65 A-Z是连续的,所以’B’对应的数值是66,'C’是67,依次递加
‘0’ – 48 0-9是连续的,所以’1’对应的数值是49,'2’是50,依次递加
// 可以通过使用字符与整数做算术运算,得出字符对应的数值是多少
char ch1 = 'a';
System.out.println(ch1 + 1); // 输出98,97 + 1 = 98
char ch2 = 'A';
System.out.println(ch2 + 1); // 输出66,65 + 1 = 66
char ch3 = '0';
System.out.println(ch3 + 1); // 输出49,48 + 1 = 49
算术表达式中包含不同的基本数据类型的值的时候,整个算术表达式的类型会自动进行提升。
提升规则:
byte类型,short类型和char类型将被提升到int类型,不管是否有其他类型参与运算。
整个表达式的类型自动提升到与表达式中最高等级的操作数相同的类型
等级顺序:byte,short,char --> int --> long --> float --> double
例如:
byte b1 = 10;
byte b2 = 20;
// byte b3 = b1 + b2; // 该行报错,因为byte类型参与算术运算会自动提示为int,int赋值给byte可能损失
精度
int i3 = b1 + b2; // 应该使用int接收
byte b3 = (byte) (b1 + b2); // 或者将结果强制转换为byte类型
int num1 = 10;
double num2 = 20.0;
double num3 = num1 + num2; // 使用double接收,因为num1会自动提升为double类型
1.2 赋值运算符
赋值运算符的作用是将一个表达式的值赋给左边,左边必须是可修改的,不能是常量。
注意:
扩展的赋值运算符隐含了强制类型转换。
1.3 自增自减运算符
注意事项:
++和-- 既可以放在变量的后边,也可以放在变量的前边。
单独使用的时候, ++和-- 无论是放在变量的前边还是后边,结果是一样的。
参与操作的时候,如果放在变量的后边,先拿变量参与操作,后拿变量做++或者–。
参与操作的时候,如果放在变量的前边,先拿变量做++或者–,后拿变量参与操作。
举例:
int i = 10;
i++; // 单独使用
System.out.println("i:" + i); // i:11
int j = 10;
++j; // 单独使用
System.out.println("j:" + j); // j:11
int x = 10;
int y = x++; // 赋值运算,++在后边,所以是使用x原来的值赋值给y,x本身自增1
System.out.println("x:" + x + ", y:" + y); // x:11,y:10
int m = 10;
int n = ++m; // 赋值运算,++在前边,所以是使用m自增后的值赋值给n,m本身自增1
System.out.println("m:" + m + ", m:" + m); // m:11,m:11
1.4 关系运算符
注意事项:
关系运算符的结果都是boolean类型,要么是true,要么是false。
int a = 10;
int b = 20;
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a > b); // false
System.out.println(a >= b); // false
System.out.println(a < b); // true
System.out.println(a <= b); // true
// 关系运算的结果肯定是boolean类型,所以也可以将运算结果赋值给boolean类型的变量
boolean flag = a > b;
System.out.println(flag); // 输出false
1.5 逻辑运算符
逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断
的结果是 true 或 false。
短路逻辑运算符
在逻辑与运算中,只要有一个表达式的值为false,那么结果就可以判定为false了,没有必要将所有表达式的值都
计算出来,短路与操作就有这样的效果,可以提高效率。同理在逻辑或运算中,一旦发现值为true,右边的表达式
将不再参与运算。
逻辑与&,无论左边真假,右边都要执行。
短路与&&,如果左边为真,右边执行;如果左边为假,右边不执行。
逻辑或|,无论左边真假,右边都要执行。
短路或||,如果左边为假,右边执行;如果左边为真,右边不执行。
举例:
public class OperatorDemo07 {
public static void main(String[] args) {
// 定义变量
int i = 10;
int j = 20;
int k = 30;
// && 有false则false
System.out.println((i > j) && (i > k)); // false && false
System.out.println((i < j) && (i > k)); // true && false
System.out.println((i > j) && (i < k)); // false && true
System.out.println((i < j) && (i < k)); // true && true
System.out.println("---------------");
// || 有true则true
System.out.println((i > j) || (i > k)); // false || false
System.out.println((i < j) || (i > k)); // true || false
System.out.println((i > j) || (i < k)); // false || true
System.out.println((i < j) || (i < k)); // true || true
System.out.println("---------------");
// && 和 &; &无论左边真假,右边都要执行;&&如果左边为真,右边执行,如果左边为假,右边不执行
// System.out.println((i++ > 100) & (j++ > 100)); // false & false
System.out.println((i++ > 100) && (j++ > 100)); // false & false
System.out.println("i:" + i);
System.out.println("j:" + j);
}
}
1.6 三元运算符
三元运算符语法格式:
关系表达式 ? 表达式1 : 表达式2;
解释:问号前面的位置是判断的条件,判断结果为boolean型,为true时调用表达式1,为false时调用表达式2。其
逻辑为:如果条件表达式成立或者满足则执行表达式1,否则执行第二个。
三元运算符案例:
/*
需求:动物园里有两只老虎,已知两只老虎的体重分别为280kg、320kg,请用程序判断两只老虎的体重是否相同
*/
public class OperatorDemo08 {
public static void main(String[] args) {
// 定义两个变量,保存老虎的体重,单位kg
int weight1 = 280;
int weight2 = 320;
// 用三元运算符实现老虎体重的判断,体重相同,返回true,否则,返回false
boolean b = weight1 == weight2 ? true : false;
// 输出结果
System.out.println("b:" + b);
}
}
/*
需求:一座寺庙里住着三个和尚,已知他们的身高分别为150cm,210cm,165cm,请用程序实现获取这三个和尚的最高身高
*/
public class OperatorDemo09 {
public static void main(String[] args) {
// 定义三个变量保存和尚的身高,单位厘米
int height1 = 150;
int height2 = 210;
int height3 = 165;
// 用三元运算符获取两个和尚的较高身高,并用临时变量保存起来
int tempHeight = (height1 > height2) ? height1 : height2;
// 用tempHeight和height3做比较
int maxHeight = (tempHeight > height3) ? tempHeight : height3;
// 输出结果
System.out.println("maxHeight:" + maxHeight);
}
}
2 数据输入
我们可以通过 Scanner 类来获取用户的输入。使用步骤如下:
1、导包。Scanner 类在java.util包下,所以需要将该类导入。导包的语句需要定义在类的上面。
import java.util.Scanner;
2、创建Scanner对象。
Scanner sc = new Scanner(System.in);// 创建Scanner对象,sc表示变量名,其他均不可变
3、接收数据
int i = sc.nextInt(); // 表示将键盘录入的值作为int数返回。
举例:
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
//创建对象
Scanner sc = new Scanner(System.in);
//接收数据
int x = sc.nextInt();
//输出数据
System.out.println("x:" + x);
}
}
3 流程控制语句
在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执
行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。
3.1 流程控制语句分类
顺序结构
分支结构(if, switch)
循环结构(for, while, do…while)
3.2 顺序结构
顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多
数的代码都是这样执行的。
顺序结构执行流程图:
举例:
/*
顺序结构:从上往下,依次执行
*/
public class OrderDemo {
public static void main(String[] args) {
System.out.println("开始");
System.out.println("语句A");
System.out.println("语句B");
System.out.println("语句C");
System.out.println("结束");
}
}
3.3 分支结构之if语句
if语句格式1
格式:
if (关系表达式) {
语句体;
}
if语句格式2
格式:
if (关系表达式) {
语句体1;
} else {
语句体2;
}
if语句格式3
格式:
if (关系表达式1) {
语句体1;
} else if (关系表达式2) {
语句体2;
}
…
else {
语句体n+1;
}
if语句流程图如下:
举例:
1、任意给出一个整数,请用程序实现判断该整数是奇数还是偶数,并在控制台输出该整数是奇数还是偶数
import java.util.Scanner;
public class IfDemo02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个整数: ");
// 接收数据
int number = sc.nextInt();
// 判断数据是奇数还是偶数
if (number % 2 == 0) {
System.out.println(number + "是偶数");
} else {
System.out.println(number + "是奇数");
}
}
}
2、键盘录入一个星期数(1,2,3…,7),输出对应的星期一,星期二,…,星期日
import java.util.Scanner;
public class IfDemo03 {
public static void main(String[] args) {
System.out.println("开始");
// 需求:键盘录入一个星期数(1,2,3...,7),输出对应的星期一,星期二,...,星期日
Scanner sc = new Scanner(System.in);
System.out.print("请输入星期数(1-7): ");
int week = sc.nextInt(); // 录入数据
if (week == 1) {
System.out.println("星期一");
} else if (week == 2) {
System.out.println("星期二");
} else if (week == 3) {
System.out.println("星期三");
} else if (week == 4) {
System.out.println("星期四");
} else if (week == 5) {
System.out.println("星期五");
} else if (week == 6) {
System.out.println("星期六");
} else {
System.out.println("星期天");
}
System.out.println("结束");
}
}
本文地址:https://blog.csdn.net/weixin_43441789/article/details/107359306