Java04运算符、流程控制语句

运算符

一.算术运算符 +、-、*、/、%

在代码中,如果有小数参与计算,则可能结果会不精确,涉及到小数在计算机中的存储。

整数参与计算,结果只能得到整数

数字进行运算的时候,数据类型不一样不能参与运算,需要转成一样的,才能参与运算

1.类型转换

        a.隐式转换(取值范围的变成 取值范围的)

取值范围从小到大:byte<short<int<long<float<double

提升规则:取值范围小的和取值范围大的进行运算,小的会先提升为大的进行运算

                   byte short char 三种数据类型在做运算的时候,都会先提升为int,然后再进行运算

        b.强制转换

如果把一个取值范围大的数值,赋值给取值范围小的数值,是不允许直接赋值的,如果一定要这么操作,就要加入强制转换  不是自动的,需要代码

格式:数据类型 变量名=(目标数据类型) 被强制转换的数据

数据过大可能会发生错误

2.字符串的"+"操作符

        a.当”+“操作中出现字符串,这个+时字符串连接符,而不是算术运算符,会将前后的数据进行拼接,产生一个新的字符串(不是只有两端都是字符串的时候才会产生新的字符串,只要有字符串出现,做的就是拼接操作

        b.当出现连续”+“操作时,从左到右做依次执行;1+87+”哈哈“ 结果是 ”88哈哈“

3.字符的"+"操作

        当字符+字符或者字符+数字,会把字符通过ASCII表查询到对应的数字再进行计算

        1+'a'->98        'a'+"abc"="aabc"

二.自增自减

        单独使用时,++和--无论放在前面还是后面,结果都一样

        int b=a++:先用后加,b=10 a=11

        int b=++a:先加后用,b=11 a=11

三.赋值运算符

        =、+=、-=、*=、/=、%= 底层都隐藏了一个强制类型转换

        short x=1;s+=1;(等同于s = (short)( s + 1 ) )

四.关系运算符

        ==、!=、<、<=、>、>=

        关系运算的结果都是布尔类型。

五.逻辑运算符

        &(与)、|(或)、^(异或:相同则false,不同则true)、! (非)

短路逻辑运算符:&&、|| 运行结果与&、| 是一样的,但是运行效率更高:当左边的表达式能够确定最终的结果,那么右边就不会参与运行了

&、| :无论左边true false,右边都要执行

六.三元运算符

        格式: 关系表达式?表达式1:表达式2;(C语言的三目表达式)

可以把这个直接赋值给一个变量,也可以直接打印


流程控制语句

顺序结构、分支结构、循环结构

一.分支结构

1.if语句

        a. if (关系表达式) {语句体} 

在语句体中,如果只有一行代码,大括号可以省略不写(如果这一行代码是int a= 100,就不行,所以最好都写上);如果对一个布尔类型的变量进行判断,不要用==,直接布尔类型的变量写在小括号中

        b.if (关系表达式){语句体1}  else {语句体2}

        c.if   (关系表达式1){语句体}       else if(关系表达式2){语句体2}……       else{语句体n+1}

从上往下依次判断,只要有一个为真,就执行相应的语句体;所有的都为假,就执行语句体n+1

2.switch语句

         a.首先计算表达式里面的值,依次与case后面的值相比较,如果有对应的值,就会执行相应的语句,执行过程中,遇到break就会整个结束;如果case里面的语句都不匹配,就会执行default里面的语句体,然后结束整个语句;

        b.表达式的取值为 byte short int char (枚举,String)

        c.case后面的值只能是字面量,不能是变量,并且值不能重复

        d.default的位置和省略;default不一定会写在最下面,而且它可以被省略

        e.case穿透:

public class Test2{
    public static void main(String[] args) {
        int number=10;
        switch (number){
            case 1:
                System.out.println("1");
                break;
            case 10:
                System.out.println("10");
               // break;
            case 20:
                System.out.println("20");
                break;
            default:
                System.out.println("no");
                break;


        }

    }
}

上面代码中输出的结果为10 20;执行过程:小括号里面的表达式会与下面的每一个case匹配,如果匹配上了就执行语句体,如果发现了berak就结束整个语句,如果没有发现break,就继续执行下一个语句,直到遇到break或者大括号为止。

如果有多个case语句重复了,也会考虑利用case穿透去简化代码。

        f.switch新特性  JDK12

public class Test2{
    public static void main(String[] args) {
        int number=10;
        switch (number){
            case 1 ->{
                System.out.println("1");
            }
            case 10 ->{
                System.out.println("10");
            }
            case 20 ->{
                System.out.println("20");
            }
            default -> System.out.println("no");
        }
    }
}

二.循环结构  for    while   do……while

1.for循环

        for(初始条件语句;条件判断语句;条件控制语句) {循环体语句}   和C语言一样

!!变量不能定义在循环里面,如果定义在里面只在当前的循环中有效,当本次循环结束后,变量就会从内存中消失,第二次循环开始又会定义一个新的变量;

2.while 循环 

        初始化语句;

        while(条件判断语句){

                循环体语句;

                条件控制语句;

}

for和while的区别:for循环中,控制循环的变量,在for循环结束后,就不能被访问到了

while循环中,控制循环的变量,不归属于其语法结构,在while循环结束后,还可以继续使用

使用场景:for 知道循环的次数或者范围;while  不知道循环的范围,只知道循环的结束条件

3.do ……while   

        初始化语句;

        do {

        循环体语句;

        条件控制语句;

        }while(条件判断语句);

先执行后判断,如果条件判断语句第一次就是false的话,循环体至少会执行一次

案列1:珠穆朗玛峰

public class Test4 {
    public static  void main(String[] args){
        double height=8844430;
        int count=0;
        double paper=0.1;
        while (paper < height){
            count++;
            paper=paper*2;
        }
        System.out.println(count);
    }
}

案列2:回文数

import java.util.Scanner;

public class Test4 {
    public static  void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int a = sc.nextInt();
        int num = 0;
        int temp = a;
        while (a!=0){
            //从右往左获取每一位数字
            int ge = a % 10;
            //修改a的值
            a = a /10;
            //拼接
            num = num *10 + ge ;
        }
        //a=123 第一次:ge=3 a=12 num=3 第二次:ge=2 a=1 num=32 第三次:ge=1 a=0 num=321;
        System.out.println(num);
        System.out.println(num==temp);
    }

}

案列3:两数相除,不用*、/、%

import java.util.Scanner;

public class Test4 {
    public static  void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入被除数:");
        int dividend = sc.nextInt();
        System.out.println("请输入除数:");
        int divisor = sc.nextInt();
        int count=0;
        while (dividend >= divisor){
            dividend = dividend - divisor;
            count++;
        }
        System.out.println("商是"+count);
        System.out.println("余数是"+dividend);

    }




}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值