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号