共计 7583 个字符,预计需要花费 19 分钟才能阅读完成。
本章将会连续 JavaSE 第 02 篇,具体解说 Java 根底语法中的运算符和流程管制中的程序构造、分支构造。
第一章:运算符
运算符,简而言之就是运算的符号。
咱们通常所了解的运算个别和数学有关系,同样编程中的运算和数学中运算规定是统一的。
在数学中个别咱们运算的是数字,在编程中运算的就是数据了。
若要运算,那必然是少不了运算符号了。
1.1- 为什么须要运算符(理解)
从利用角度来看,在软件开发中,有很多很多业务性能须要通过程序运算的能力实现,比方:
- 网上购物商品数量的统计、价格的计算
- 支付宝或微信的生产转账
- 玩游戏中游戏人物的生命值、金币的计算
- …
如何命令计算机计算数据呢?这时就须要运算符号示意运算。
1.2- 运算符的分类(理解)
- 赋值运算符
- 算术运算符
- 关系运算符
- 逻辑运算符
- 其余运算符
1.3- 赋值运算符(记忆)
运算符格局和作用
- 运算符号:
=
- 作用:能够把右侧的 数据 赋值给 指定的 变量。
代码
int age = 10; // 把数据 10 赋值给变量 age
1.4- 算术运算符(记忆)
运算符格局和作用
-
运算符号:
- 示意加法运算:
+
- 示意减法运算:
-
- 示意乘法运算:
*
- 示意除法运算:
/
- 示意取模运算:
%
- 示意加法运算:
- 作用:能够实现数字相干的运算
代码
public static void main(String[] args) { | |
int a = 10; | |
int b = 3; | |
/* 加法运算 */ | |
System.out.println(a + b); | |
// 后果:13 | |
/* 减法运算 */ | |
System.out.println(a - b); | |
// 后果:7 | |
/* 乘法运算 */ | |
System.out.println(a * b); | |
// 后果:30 | |
/* 除法运算 */ | |
System.out.println(a / b); | |
// 后果:3 | |
/* 取模运算 - 求余数 */ | |
System.out.println(a % b); | |
// 后果:1 | |
/* 留神:在 java 中,任何整数不能除以 0,在运行时会产生谬误!*/ | |
System.out.println(200/0); | |
// 后果:Exception in thread "main" java.lang.ArithmeticException: / by zero | |
} |
1.5- 关系运算符(记忆)
关系运算符也叫比拟运算符
运算符格局和作用
-
运算符:
- 大于:
>
- 小于:
<
- 等于:
==
- 大于等于:
>=
- 小于等于:
<=
- 不等于:
!=
- 大于:
- 作用:能够实现条件判断是否成立,运算后果是布尔值
true
或false
代码
public static void main(String[] args) { | |
int a = 10; | |
int b = 12; | |
/* 大于 */ | |
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 | |
} |
留神:千万不要把 ”==” 误写成“=”,”==” 是判断是否相等的关系,”=” 是赋值。
1.6- 逻辑运算符(记忆)
逻辑运算符格局及运算符作用
逻辑运算符能够判断多个组合条件是否成立,运算后果是布尔值:true 或 false
代码
public class Operator {public static void main(String[]args){ | |
// 定义变量 | |
int i = 100; | |
int j = 200; | |
int k = 300; | |
//&“与”,并且的关系,只有表达式中有一个值为 false,后果即为 false | |
System.out.println((i > j) & (i > k)); //false & false, 输入 false | |
System.out.println((i < j) & (i > k)); //true & false, 输入 false | |
System.out.println((i > j) & (i < k)); //false & true, 输入 false | |
System.out.println((i < j) & (i < k)); //true & true, 输入 true | |
//|“或”,或者的关系,只有表达式中有一个值为 true,后果即为 true | |
System.out.println((i > j) | (i > k)); //false | false, 输入 false | |
System.out.println((i < j) | (i > k)); //true | false, 输入 true | |
System.out.println((i > j) | (i < k)); //false | true, 输入 true | |
System.out.println((i < j) | (i < k)); //true | true, 输入 true | |
//^“异或”,雷同为 false,不同为 true | |
System.out.println((i > j) ^ (i > k)); //false ^ false, 输入 false | |
System.out.println((i < j) ^ (i > k)); //true ^ false, 输入 true | |
System.out.println((i > j) ^ (i < k)); //false ^ true, 输入 true | |
System.out.println((i < j) ^ (i < k)); //true ^ true, 输入 false | |
//!“非”,取反 | |
System.out.println((i > j)); //false | |
System.out.println(!(i > j)); //!false,, 输入 true | |
} | |
} |
短路逻辑运算符
在逻辑与运算中,只有有一个表达式的值为 false,那么后果就能够断定为 false 了,没有必要将所有表达式的值都计算出来,短路与操作就有这样的成果,能够提高效率。
同理在逻辑或运算中,一旦发现值为 true,左边的表达式将不再参加运算
- 逻辑与
&
,无论右边虚实,左边都要执行。 - 短路与
&&
,如果右边为真,左边执行;如果右边为假,左边不执行。 - 逻辑或
|
,无论右边虚实,左边都要执行。 - 短路或
||
,如果右边为假,左边执行;如果右边为真,左边不执行。
代码
public class Operator2 {public static void main(String[]args){ | |
int x = 3; | |
int y = 4; | |
System.out.println(((x=x+1) > 4) & ((y=y+1) > 5)); // 两个表白都会运算 | |
System.out.println(x); // 4 | |
System.out.println(y); // 5 | |
int a = 3; | |
int b = 4; | |
System.out.println(((a=a+1) > 4) && ((b=b+1) > 5)); // 右边曾经能够确定后果为 false,左边不参加运算 | |
System.out.println(a); // 4 | |
System.out.println(b); // 4 | |
} | |
} |
1.7- 其余运算符(记忆)
-
复合赋值运算符
- 运算符:
+=
、-=
、/=
、*=
、%=
- 作用:和变量相干,是算术运算符和赋值运算符的组合应用。
- 代码:
- 运算符:
int age = 10; | |
age+=3; | |
System.out.print(age); | |
// 运行后果:13。age+=3 拆解 age = aeg + 3 |
-
小括号
- 运算符:
(表达式)
- 作用:能够进步运算的优先级。
- 代码:
- 运算符:
int result = (10 + 8) * 2
-
自增和自减
- 运算符:
++
、--
-
作用:变量自增 1 或自减 1
- 前置自增或自减:
++ 变量
或-- 变量
,先让变量本身加 1 或减 1,再参加表达式运算。 - 后置自增或自减
变量 ++
或变量 --
,先让变量本身参加表达式运算,再本身加 1 或减 1
- 前置自增或自减:
- 代码:
- 运算符:
/* 前置自增 */ | |
int a = 10; | |
System.out.print(++a); // 后果:11 | |
System.out.print(a); // 后果:11 | |
/* 后置自增 */ | |
int b = 10; | |
System.out.print(b++); // 后果:10 | |
System.out.print(b); // 后果:11 |
-
三元运算符
- 格局:
条件表达式?表达式 1: 表达式 2
- 意义:问号后面的地位是判断的条件,判断后果为 boolean 型,为 true 时调用表达式 1,为 false 时调用表达式 2。其逻辑为:如果条件表达式成立或者满足则执行表达式 1,否则执行第二个。
- 代码:
- 格局:
int a = 10>8?10:8; | |
System.out.print(a); // 后果:10 |
第二章:流程管制
2.0- 数据输出(理解)
需要
接管用户录入的两个数字,计算两个数字的和。
常识筹备:如何接管用户录入的数据
咱们能够通过 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 数返回。
4、示例
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); } | |
} |
性能实现:
import java.util.Scanner; | |
public class Test01 {public static void main(String[]args){ | |
// 创立 Scanner 对象 | |
Scanner scanner = new Scanner(System.in); | |
// 提醒输出数据 | |
System.out.println("请输出第一个数字:"); | |
// 接管用户输出的第一个数据 | |
int num1 = scanner.nextInt(); | |
// 提醒输出数据 | |
System.out.println("请输出第二个数字:"); | |
// 接管用户输出的第二个数据 | |
int num2 = scanner.nextInt(); | |
// 计算两个数字的和并输入 | |
int sum = num1 + num2; | |
// 任何数据和字符串相加时,"+" 示意连接符 | |
System.out.println(num1 + "+" + num2 + "=" + sum); | |
} | |
} |
输入后果
请输出第一个数字:100 | |
请输出第二个数字:20 | |
100+20=120 |
2.1- 为什么要学习流程管制(理解)
流程,指的是程序的执行程序。程序默认的执行程序是自上而下执行的。
然而,在程序中有些程序是抉择执行的或是反复执行的,不同的抉择会有不同的性能。比方咱们玩游戏时王者光荣时,咱们在手机上抉择不同英雄时,实质底层就是程序在执行不同的代码。
所以,若要控制程序执行的流程,就必须学习流程管制语句。
流程管制语句分为三大类:程序构造、分支构造 和 循环构造.
本篇咱们学习程序构造和分支构造,循环构造咱们下一篇再细细解说。
2.2- 程序构造(重点)
程序构造是程序中最简略最根本的流程管制,没有特定的语法结构,依照代码的先后顺序自上而下、从左向右,顺次执行,程序中大多数的代码都是这样执行的。
程序构造执行流程图:
public class Test {public static void main(String[]args){System.out.println(1); | |
System.out.println(2); | |
System.out.println(3); | |
System.out.println(4); | |
} | |
} | |
/* | |
执行后果:1 | |
2 | |
3 | |
4 | |
*/ |
2.3- 分支构造(重点)
2.3.1- if 语句
语句格局:
if(条件表达式){// 代码块}
执行流程:
若条件表达式成立(后果是 true),则执行代码块中的程序。
示例:
需要:接管用户输出的年龄,判断用户是否满 18 岁,若满 18 岁,则输入“年龄非法”
import java.util.Scanner; | |
public class Test02 {public static void main(String[]args){ | |
// 创立 Scanner 对象 | |
Scanner scanner = new Scanner(System.in); | |
// 提醒输出数据 | |
System.out.println("请输入您的年龄:"); | |
// 接管用户输出的年龄 | |
int age = scanner.nextInt(); | |
// 判断 | |
if(age >=18) {System.out.println("年龄非法"); | |
} | |
} | |
} |
2.3.2- if-else 语句
语句格局
if(条件表达式){// 代码块}else {// 代码块}
执行流程
若条件表达式成立(后果是 true),则执行 if 代码块中的程序,反之执行 else 代码块中的程序。
示例:
需要:接管用户输出的年龄,判断用户是否满 18 岁,若满 18 岁,则输入“年龄非法”,否则输入“年龄不非法”
import java.util.Scanner; | |
public class Test03 {public static void main(String[]args){ | |
// 创立 Scanner 对象 | |
Scanner scanner = new Scanner(System.in); | |
// 提醒输出数据 | |
System.out.println("请输入您的年龄:"); | |
// 接管用户输出的年龄 | |
int age = scanner.nextInt(); | |
// 判断 | |
if(age >=18) {System.out.println("年龄非法"); | |
}else {System.out.println("年龄不非法"); | |
} | |
} | |
} |
2.3.3- if-else if-…else 语句
语法格局:
if(条件表达式){// 代码块}else if(条件表达式){ // 需要不同,else if 语句定义的个数不同 | |
// 代码块 | |
} | |
else if(条件表达式){// 代码块} | |
// ... | |
else { // 需要不同,else 语句可有可无 | |
// 代码块 | |
} |
执行流程:
代码从上而下顺次判断。
若其中有满足条件的,则进入对于的代码块执行,后续分支不再执行。
若都不满足,则执行 else 中的语句。
示例:
需要:接管用户输出的学习成绩,输入等级。问题大于等于 90 是 A,大于等于 80 小于 90 是 B,大于等于 70 小于 80 是 C,大于等于 60 小于 70 是 D,其余状况时 E
import java.util.Scanner; | |
public class Test04 {public static void main(String[]args){ | |
// 创立 Scanner 对象 | |
Scanner scanner = new Scanner(System.in); | |
// 提醒输出数据 | |
System.out.println("请输出学生问题:"); | |
// 接管用户输出的数据 | |
float score = scanner.nextFloat(); | |
// 判断 | |
if(score>=90) {System.out.println("A"); | |
}else if(score>=80) {System.out.println("B"); | |
}else if(score>=70) {System.out.println("C"); | |
}else if(score>=60) {System.out.println("D"); | |
}else{System.out.println("E"); | |
} | |
} | |
} |
2.3.4- switch 语句
语法格局:
switch(表达式) { | |
case 常量值 1: | |
语句体 1; | |
break; | |
case 常量值 2: | |
语句体 2; | |
break; | |
//... | |
default: | |
语句体 n +1; | |
break; | |
} |
执行流程:
首先计算出表达式的值
其次,和 case 顺次比拟,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到 break 就会完结。
最初,如果所有的 case 都和表达式的值不匹配,就会执行 default 语句体局部,而后程序完结掉。
示例 1:
需要:提醒用户录入 1 - 7 之间的数字,依据数据返回给用户星期几
import java.util.Scanner; | |
public class Test05 {public static void main(String[]args){ | |
// 创立 Scanner 对象 | |
Scanner scanner = new Scanner(System.in); | |
// 提醒输出数据 | |
System.out.println("请输出一个数字(1-7):"); | |
// 接管用户输出的数据 | |
int num = scanner.nextInt(); | |
// 判断 | |
switch (num){ | |
case 1: | |
System.out.println("星期一"); | |
break; | |
case 2: | |
System.out.println("星期二"); | |
break; | |
case 3: | |
System.out.println("星期三"); | |
break; | |
case 4: | |
System.out.println("星期四"); | |
break; | |
case 5: | |
System.out.println("星期五"); | |
break; | |
case 6: | |
System.out.println("星期六"); | |
break; | |
case 7: | |
System.out.println("星期日"); | |
break; | |
default: | |
System.out.println("不非法"); | |
break; | |
} | |
} | |
} |
示例 2:
需要:一年有 12 个月,分属于春夏秋冬 4 个节令,键盘录入一个月份,请用程序实现判断该月份属于哪个节令,并输入。
import java.util.Scanner; | |
public class Test06 {public static void main(String[]args){ | |
// 创立 Scanner 对象 | |
Scanner scanner = new Scanner(System.in); | |
// 提醒输出数据 | |
System.out.println("请输出一个月份(1-12):"); | |
// 接管用户输出的数据 | |
int num = scanner.nextInt(); | |
// 判断 | |
switch (num){ | |
case 12: | |
case 1: | |
case 2: | |
System.out.println("冬"); | |
break; | |
case 3: | |
case 4: | |
case 5: | |
System.out.println("春"); | |
break; | |
case 6: | |
case 7: | |
case 8: | |
System.out.println("夏"); | |
break; | |
case 9: | |
case 10: | |
case 11: | |
System.out.println("秋"); | |
break; | |
default | |
System.out.println("输出的数字不非法"); | |
} | |
} | |
} |
留神:如果 switch 中得 case,没有对应 break 的话,则会呈现 case 穿透的景象。