2. 赋值运算
注意事项:
扩展的赋值运算符隐含了强制类型转换
3. 自增自减运算符
| 符号 | 作用 | 说明 |
|---|---|---|
| ++ | 自增 | 变量的值加1 |
| -- | 自减 | 变量的值减1 |
注意事项:
-
++和--既可以放在变量的后边,也可以放在变量的前边。
-
单独使用的时候,++和--无论是放在变量的前边还是后边,结果是一样的。
-
参与操作的时候,如果放在变量的后边,先拿变量参与操作,后拿变量做++或者--。参与操作的时候,如果放在变量的前边,先拿变量做++或者--,后拿变量参与操作。
4. 关系运算符
| 符号 | 说明 |
|---|---|
| == | a==b,判断a和b的值是否相等,成立为true,不成立为false |
| != | a!=b,判断a和b的值是否不相等,成立为true,不成立为false |
| > | a>b,判断a是否大于b,成立为true,不成立为false |
| >= | a>=b,判断a是否大于等于b,成立为true,不成立为false |
| < | a<b,判断a是否小于b,成立为true,不成立为false |
| <= | a<=b,判断a是否小于等于b,成立为true,不成立为false |
关系运算符的结果都是boolean类型,要么是true,要么是false。
5. 逻辑运算符
5.1 逻辑运算符概述
在数学中,一个数据x,大于3,小于6,我们可以这样来进行表示: 3<x<6。
在Java中,需要把上面的式子先进行拆解,再进行合并表达。
-
拆解为:x>3和x<6
-
合并后:x>3&&x<6
&&其实就是一个逻辑运算符。
我们可以这样说,逻辑运算符,是用来连接关系表达式的运算符。当然,逻辑运算符也可以直接连接布尔类型的常量或者变量。
5.2 逻辑运算符
5.3 短路逻辑运算符
| 符号 | 作用 | 说明 |
|---|---|---|
| && | 短路与 | 作用和&相同,但是有短路效果 |
| || | 短路或 | 作用和|相同,但是有短路效果 |
注意事项:
-
逻辑与&,无论左边真假,右边都要执行。
短路与&&,如果左边为真,右边执行;如果左边为假,右边不执行。
-
逻辑或||,无论左边真假,右边都要执行。
短路或||,如果左边为假,右边执行;如果左边为真,右边不执行。
最常用的逻辑运算符:&&,||,!
6. 三元运算符
-
格式:关系表达式?表达式1:表达式2;
-
范例: a > b ? a : b;
计算规则:
首先计算关系表达式的值
如果值为true,表达式1的值就是运算结果
如果值为false,表达式2的值就是运算结果
数据输入
1.2 Scanner使用的基本步骤
-
导包
import java.util.Scanner;
//导包的动作必须出现在类定义的上边 -
创建对象
Scanner sc = new Scanner(System.in);
//上面这个格式里面,只有sc是变量名 -
接受数据
int i = sc.nextInt();
分支语句
1. 流程控制
1.1 流程控制语句概述
一直重复。循环结构
1.2 流程控制语句分类
-
顺序结构
-
分支结构(if,switch)
-
循环结构(for,while,do...while)
1.3 顺序结构
顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
2. if语句
2.1 if语句格式1
格式:
if(关系表达式){
语句体;
}
执行流程:
-
首先计算关系表达式的值
-
如果关系表达式的值为true就执行语句体
-
如果关系表达式的值为false就不执行语句体
-
继续执行后面的语句内容
2.2 if语句格式2
格式:
if(关系表达式1){
语句体1;
}else{关系表达式2
语句体2;
}
执行流程:
-
首先计算关系表达式的值
-
如果关系表达式的值为true就执行语句体1
-
如果关系表达式的值为false就执行语句体2
-
继续执行后面的语句内容
2.3 if语句格式3
格式:
if(关系表达式1){
语句体1;
}else if {关系表达式2
语句体2;
}
...else{
语句体n+1;
}
执行流程:
-
首先计算关系表达式1的值
-
如果值为true就执行语句体1;如果值为false就计算关系表达式2的值
-
如果值为true就执行语句体2;如果值为false就计算关系表达式3的值
-
如果没有任何关系表达式为true,就执行语句体n+1。
3. switch语句
3.1 switch语句格式
格式:
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体n+1;
[break;]
}
格式说明:
-
表达式:取值为byte、short、int、char,JDK5以后可以是枚举,JDK7以后可以是String
-
case:后面跟的是要和表达式进行比较的值。
-
break:表示中断,结束的意思,用来结束switch语句。
-
default:表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
执行流程:
-
首先计算表达式的值。
-
依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
-
如果所有的case后面的值和表达式的值都不匹配,就会执行default
-
里面的语句体,然后程序结束掉。
注意事项:
在switch语句中,如果case控制的语句体后面不写break,将出现穿透现象,在不判断下一个case值的情况下,向下运行,直到遇到break,或者整体switch语句结束
循环语句
1. for循环语句
1.1 循环结构
特征: 重复做某件事情 具有明确的开始和停止标志
循环结构的组成:
-
初始化语句:用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样
-
条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去
-
循环体语句:用于表示循环反复执行的内容,简单说就是循环反复执行的事情
-
条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去
循环结构对应的语法:
-
初始化语句:这里可以是一条或者多条语句,这些语句可以完成一些初始化操作
-
条件判断语句:这里使用一个结果值为boolean类型的表达式,这个表达式能决定是否执行循环体。例如: a<3
-
循环体语句:这里可以是任意语句,这些语句将反复执行
-
条件控制语句:这里通常是使用一条语句来改变变量的值,从而达到控制循环是否继续向下执行的效果。常见i++,i--这样的操作
1.2 for循环
格式:
for (初始化语句;条件判断语句;条件控制语句){
循环体语句;
}
执行流程:
-
执行初始化语句
-
执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
-
执行循环体语句
-
执行条件控制语句
-
回到 2. 继续
public class ForDemo02 {
public static void main(String[] args) {
//练习1: 计算0到100之间的奇数和偶数的和
int oddSum = 0;
int eveSum = 0;
for (int i = 0; i <= 100; i++) {
if (i%2!=0){ //意思为i模运算2不等于0
oddSum+=i; // oddSum = oddSum+i
}else {
eveSum+=i;
}
}
System.out.println("奇数的和:"+oddSum);
System.out.println("偶数的和:"+eveSum);
}
}
案例:水仙花
需求:在控制台输出所有的“水仙花数”
什么是“水仙花数”?
水仙花数是一个三位数
111 222 333 345 723
水仙花数的个位、十位、百位的数字立方和等于原数
分析:
-
三位数的个位数字如何求
371 1就是原始数字对10进行取余运算的结果
-
百位数字如何求
371 3就是原始数字除以100的结果(整除)
-
三位数的十位数字如何求
371 371通过除以10,可以将7移动到个位上(整数)
37通过对10进行取余运算可以得到最后一位的值7
思考:任意数字的指定位上的数值如何求
先使用整除操作将要求的数字移动到个位上,再使用取余操作取出最后一位上的值
123456789
先整除10000得到12345,再对10取余得到5
分析:
-
输出所有的水仙花数必然要使用到循环,遍历所有的三位数,三位数从100开始,到999结束
for (int i = 100; i <= 999; i++) -
不是每个三位数都是水仙花数,因此需要判定,满足条件的数字才进行输出
if (执行的限制条件) -
判定条件是将三位数中的每个数值取出来,计算立方和后与原始数字比较是否相等
if (? + ? + ? == 原数) {输出原数} -
在计算之前获取三位数中每个位上的值
int a = 原数的个位;
int b = 原数的十位;
int c = 原数的百位;
if ( a*a*a + b*b*b + c*c*c == 原数){
输出原数
}
public class ForTest04{
public static void main(String[] args){
for(int i=100; i<1000; i++){
int ge = i&10;
int shi = i/10&10;
int bai = i/10/10&10;
if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i){
System.out.println(i);
}
}
}
}
统计
统计有多少水仙花
public class ForTest05{
public static void main(String[] args){
int count = 0;
for(int i=100; i<1000; i++){
int ge = i&10;
int shi = i/10&10;
int bai = i/10/10&10;
if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i){
count++;
}
}
System.out.println("水仙花共有:" + count + "个")
}
}
2. while 循环语句
2.1 while循环语句
执行流程:
-
执行初始化语句
-
执行条件判断语句,看其结果是true还是false
-
如果是false,循环结束
-
如果是true,继续执行执行循环体语句
-
执行条件控制语句回到 2. 继续
输出5个HelloWorld
public class WhileDemo {
public static void main(String[] args) {
int j = 1;
while(j<=5){
System.out.println("HelloWorld");
j++;
}
}
}
案例:珠穆朗玛峰
需求:世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度?
public class WhileTest {
public static void main(String[] args){
int count = 0;
double paper = 0.1;
int zf = 8844430;
whlie(paper <= zf){
paper *= 2;
count++;
}
System.out.println("需要折叠:" + count + "次");
}
}
3. do...while循环语句
3.1 do...while循环语句格式
执行流程
-
执行初始化语句
-
执行循环体语句
-
执行条件控制语句
-
执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
-
回到②继续
-
对于while语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一-次。
-
do...while循环和while循环相似,不同的是,do...while循环至少会执行一次。
do{
//代码语句
}while(布尔表达式);
-
While和do-While的区别:
-
while先判断后执行。do...while是先执行后判断!
-
Do...while总是保证循环体会被至少执行一次! 这是他们的主要差别。
3.2 三种循环的区别
三种循环的区别:
-
for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
-
do...while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)
for和while的区别:
-
条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
-
条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用
死循环格式:
for(;;){ }
while(true){ }
do{ }while(true);
while的死循环格式是最常用的
命令提示符窗口中Ctrl+C可以结束死循环
4. 跳转控制语句
4.1跳转控制语句概述
终止循环体内容的执行
-
continue 用在循环中,基于条件控制,跳过某次循环体内容的执行,继续下一次的执行
-
break 用在循环中,基于条件控制,终止循环体内容的执行,也就是说结束当前的整个循环
注意:使用是基于条件控制的
5. 循环嵌套
5.1 循环嵌套概述
语句结构:
-
顺序语句 以分号结尾,表示一句话的结束
-
分支语句 一对大括号表示if的整体结构,整体描述一个完整的if语句
一对大括号表示switch的整体结构,整体描述一个完整的switch语句
-
循环语句 —对大括号表示for的整体结构,整体描述一个完整的for语句
一对大括号表示while的整体结构,整体描述一个完整的while语句do..while以分号结尾,整体描述一个完整的do..while语句
任何语句对外都可以看成是一句话,一句代码分支语句中包含分支语句称为分支嵌套
循环语句中包含循环语句称为循环嵌套
//外循环控制小时的范围,内循环控制分钟的范围
public class Test {
public static void main(String[] args){
for(int hour = 0; hour<24; hour++){
for(int minute=0; minute<60; minute++){
System.out.println(hour + "时" + minute + "分");
}
System.out.println("---------");
}
}
}
循环输出时间
6. Random
6.1 Random的作用和使用步骤
作用:用于产生一个随机数
使用步骤:
-
导包
import java.until.Random;
//导包的动作必须出现在类定义的上面
-
new一个 Random
Random r = new Random();
-
获取随机数
int number = r.nextInt(10); //获取随机数的范围:[0,10) 包括0,不包括10
获取一个1-100之间的随机数
import java.util.Random;
pubilc class RandomDemo {
pubilc static void main(String[] agrs){
Random r = new Random();
int x = r.nextInt(100) + 1;
System.out.println(x);
}
}
案例:猜数字
需求:程序自动生成一个1-100之间的数字,使用程序实现猜出这个数字是多少?
当猜错的时候根据不同情况给出相应的提示
-
如果猜的数字比真实数字大,提示你猜的数据大了
-
如果猜的数字比真实数字小,提示你猜的数据小了
-
如果猜的数字与真实数字相等,提示恭喜你猜中了
分析:
-
要完成猜数字的游戏,首先需要有一个要猜的数字,使用随机数生成该数字,范围1到100
-
因为无法预知几次能够猜中,因此猜数字这个操作应该是反复进行的,需要使用循环,而while循环通常用于描述未知循环次数的循环
-
使用程序实现猜数字,每次均要输入猜测的数字值,需要使用键盘录入实现
-
比较输入的数字和系统产生的数据,需要使用分支语句。这里使用if..else..if..格式,根据不同情况进行猜测结果显示,当猜中后使用break结束循环即可
import java.util.Random;
import java.util.Scanner;
pubilc class RandomTest {
pubilc static void main (String[] args) {
Random r = new Random();
int number = r.nextInt(100) + 1;
while(true) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要猜的数字:");
int guessNumber = sc.nxetInt();
if(guessNumber > number) {
System.out.println("你猜的数字" + guessNumber + "大了");
} else if(guessNumber < number) {
System.out.println("你猜的数字" + guessNumber + "小了");
} else {
System.out.println("你猜中了");
break;
}
}
}
}
浙公网安备 33010602011771号