Java基础第三天

学习感受

今天学到了if判断语句,作业题难度也加了一些,有些打不开思维。但也正在一点点的进步!

表达式自动提升类型

在程序中出现直接写出来的数字,如果是整数默认类型为int; 如果为小数默认类型为double.

一个表达式中包含多种数据类型时,结果的数据类型会自动提升,规则如下:

  • byte, short, char 自动提升为int
  • 整个表达式的类型提升到最高级的数据类型
        float f1 = 3.14F;  //直接写3.14这样的小数, 默认类型为double
        int i1 = 2147483647; //直接写一个整数的数字, 默认类型为int

        byte b1 = 3;
        byte b2 = 2;
        int sum1 = b1 + b2; //b1 和 b2 自动提升类型为int

        short s1 = 3;
        short s2 = 2;
        int sum2 = s1 + s2; //s1, s2 自动提升类型为int

        char c1 = '1';
        char c2 = '2';
        int sum3 = c1 + c2;  //c1, c2 自动提升类型为int
        System.out.println(sum3);
        
        long l1 = 8;
        //以为表达式中有一个long类型的加数, 所以整个表达式的结果提升为long
        long sum4 = l1 + s1 + b1;
        
        
//        练习:
        short s3 = 5;
//        s3 = s3 - 2; //表达式中的2是int, 表达式的结果为int, 这个语句语法是错误的

字面量(直接量)

在代码中直接出现的数字或者字符串,叫做字面量

//        字面量
        int m = 20; //20称为字面量
        float f5 = 3.14F;  //3.14称为字面量
        String str1 = "字符串"; //字符串 称为字面量

自动装箱和自动拆箱

每一种基本类型都对应一种包装类型(类),基本类型与包装类型之间可以自动转换,

从基本类中转到包装类型称为自动装箱、

从包装类型转到基本类型称为自动拆箱

基本类型包装器类型
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean
 		int i = 10;
        Integer integer = i; //基本类型直接赋值给包装类型, 自动装箱
        int i2 = integer; //包装类型直接赋值给基本类型, 自动拆箱


        //包装类型的常用方法
        String str = "123";
        Integer value = Integer.valueOf(str); //把字符串转换为Integer类型
        System.out.println(1 + value);
        int i1 = Integer.parseInt(str); //把字符串转为int类型
        System.out.println(2 + i1);

Java里的数据类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VBx7GIML-1658681363399)(D:\笔记\Java基础第三天.assets\image-20220722105347604.png)]

运算符

运算符是一种特殊的符号,用于数据计算、赋值和比较。运算符将多个操作数连接在一起,就成为了表达式。

Java运算符包含以下几类:

  • 算术运算符
  • 赋值运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符
  • 三目运算符

算术运算符

Java里的算术运算符包含:+ - * / % ++ –

  • +运算符除了数学的相加的作用外, 还可以用于字符串的拼接
		int sum1 = 3 + 2;
        String str1 = "加法的和等于:" + sum1; //+用于字符串,自动把后面int类型的数字转为字符串
        System.out.println(str1);

        String str2 = sum1 + "这个数是和"; //字符串和其它类型拼接时顺序无关
        System.out.println(str2);

        String str3 = "字符串与布尔类型拼接" + true; //字符串可以和所有的基本数据类型拼接
        System.out.println(str3);
  • -做减法运算
  • *做乘法运算
  • /做除法运算

​ 整除的结果也为整数(舍弃小数部分); 整除时不能用0做除数

​ 浮点数相除结果有小数;浮点数相除时可以用0作为除数,结果时Infinity

 ```java
    int res1 = 8 / 4;
    System.out.println("8/4: " + res1);
    res1 = 8 / 3;

// 两个整数相除,得到的结果是整数,舍弃小数部分
System.out.println("8/3: " + res1);
// res1 = 8 / 0;
// System.out.println(“8/0:” + res1); //整除不能用0做除数,会抛出异常

    double res2 = 8 / 2.5; //只要有一个操作数为小数,除出来结果就是小数
    System.out.println("8/2.5: " + res2);
    res2 = 10 / 3.0;
    System.out.println("10/3.0:" + res2); //10/3.0:3.3333333333333335
    res2 = 5.0 / 0;  //浮点数除法,除数可以为零,得到的结果是Infinity(无穷大)
    System.out.println("5.0/0:" + res2); //5.0/0:Infinity
 ```
  • %模运算用于得到除法的余数

整数取模,除数不能为0

小数取模,除数可以为0, 得到的结果是NaN(Not a Number)

//        取模运算
        res1 = 5 % 3; //结果是余数
        System.out.println("5%3: " + res1);
//        res1 = 5 % 0; //模运算也不能用0作为除数
//        System.out.println("5%0:" + res1);
        res2 = 5.1 % 0;
        System.out.println("5.0%3:" + res2);

  • ++称为单目运算符(只有一个操作数),自己加1, 可以放在操作数左边或右边、

    –称为弹幕运算符,自己减1,可以放在操作数的左边或右边

        int k = 1;
        /*自加1, ++在后面,操作数先参与运算,然后再加1
          等效于:  res1 = 5 + k;
                   k = k + 1;
        */
        res1 =  5 + k++;
        System.out.println(res1); // 6
        System.out.println(k); //2
        int j = 1;
        /*j自加1, ++在前面,先自加,再参与表达式运算
        *  等效于:   j = j + 1;
        *           res1 = 5 + j;
        * */
        res1 = 5 + ++j;
        System.out.println(res1);//7
        System.out.println(j); //2

赋值运算符

  • = 赋值运算, 把=右边的结果赋给左边的变量。右边的值可以是字面量,表达式,变量,方法调用
       int n = 5; //赋值字面量
        n = 3 + 2; //赋值表达式
        n = k - j; //赋值含有变量的表达式
        Scanner scanner = new Scanner(System.in);
//        n = scanner.nextInt(); //赋值一个方法返回值
        System.out.println(n = 4 + 6);//10, 赋值语句会返回结果
  • 扩展(组合)的赋值运算符

+= -= *= /= %= 有算术运算符和赋值运算符组合而成的

      	n = n + 2;
        n += 2; // n = n + 2
        n -= 2; // n = n -2
        n *= 2; // n = n * 2
        n /= 2; // n = n / 2
        n %= 2; // n = n % 2

比较运算符

用于判断两个操作数的大小或是否相等,返回的值是布尔型。包含:

> < == >=(大于或等于) <=(小于或者等于) !=

        System.out.println(3 > 2); //true
        System.out.println(3 < 2); //false
        System.out.println(2 == 2); //true
        System.out.println(2 != 2); //false
        System.out.println(3 >= 3); //true
        System.out.println(3 <= 5); //true

逻辑运算符

  • && 短路与
  • & 与
  • || 短路或
  • | 或
  • ! 非
  • ^ 异或
        System.out.println("----------逻辑运算---------");
        //&& 两个操作数都为true, 结果才为true
        System.out.println(true && true);
        System.out.println(true && false);
        n = 1;
        //短路与, 如果根据第一个操作数就能觉得表达式的结果,那么第二个表达式不会再执行
        System.out.println(false && (2 == ++n));//第一个操作数是false, 所以后面的表达式(2 == ++n)不会被执行, n还是1
        System.out.println(n);

        System.out.println(true & true);
        System.out.println(false & true);
        int m = 1;
        System.out.println(false & (2 == ++m));
        System.out.println(m);

//        || , |  只要有一个为true,就返回true
        System.out.println(true || true);//true
        System.out.println(false || true);//true
        System.out.println(false || false); //false

//        求反, true变false; false变true
        System.out.println(!true);
        System.out.println(!false);
        System.out.println(!(2 == 2));// 等效于 2 != 2

        //^ 异或, 只有两个操作数不同时返回true, 相同(都true, 都false)返回false
        System.out.println(true ^ false);//true
        System.out.println(false ^ false);//false
        System.out.println(true ^ true);//false

位运算符

  • & 按位与
  • | 按位或
  • ~ 按位非
  • ^ 按位异或
  • << 向左移位
  • > > 向右移位
  • >>> 无符号右移
        System.out.println("---------位运算符------------");
        int a = 5; // 101
        int b = 7; // 111
        System.out.println(a & b); //5, 101

        System.out.println(a | b); //7, 111

        a = -5;
        System.out.println(~a);// 4

        a = 5;
        System.out.println(a ^ b);//2, 010

        /*
        * 面试题:请用性能最优的方法计算: 2 * 8
        * */
        a = 2;
        System.out.println(a << 3);//16,  二进制10 左移3位  得到二进制 10000

        System.out.println(5 >> 2);

        System.out.println(-5 >>> 2);

三目运算符

三目运算符用于两分支的判断,等效于if else语句

语法: 条件表达式 ?为真值 :为假的值

       res1 = 3 > 5 ? 100 : 0;
        System.out.println(res1);

  • 练习: 从控制台输入两个整数, 打印出较大的数
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入一个整数:");
        int i = scanner.nextInt();
        System.out.println("输入一个整数:");
        int m = scanner.nextInt();
//        如果i大于m, 返回i; 如果i小于m, 返回m
        int res1 = i > m ? i : m;
        System.out.println(res1);

运算符的优先级

括号 > 单目运算符 > 算术运算 > 比较运算符 > 逻辑运算符 > 三目 > 赋值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xCuWfKrp-1658681363402)(D:\笔记\Java基础第三天.assets\image-20220722151735095.png)]

        /*
        * 第一步,计算括号: 5 * ++a == 8 ? true : false
        * 第二步,计算++: 5 * 6 == 8 ? true : false
        * 第三步,计算* : 30 == 8 ? true : false
        * 结果:false
        * */
        a = 5;
        System.out.println((3 + 2) * ++a == 8 ? true : false);

条件判断语句

单分支条件判断

if(条件表达式){

​ //条件为真时执行的语句

}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PkkjfM8J-1658681363403)(D:\笔记\Java基础第三天.assets\image-20220722155344443.png)]

        int rain = 1; //是否下雨,1-下雨; 0-没有下雨
        if(rain == 1) { //在下雨
            System.out.println("出门要带雨伞");
        }

两分支判断

if(条件表达式){

​ //为真执行

}else{

//为假执行

}

 //性别,  1-男; 0-女
        int sex = 1;
        if(sex == 1){
            System.out.println("男生");
        }else{
            System.out.println("女生");
        }

作业

  1. 输入金额,大于15元,吃鸭血面;如果小于15,吃小面。
package com.hqyj;

import java.util.Scanner;

public class LianXi {
    public static void main(String[] args) {
    Scanner scanner1 = new Scanner(System.in);
        System.out.println("请输入您现在拥有的金额:");
        int money = scanner1.nextInt();
        if (money>=15){
            System.out.println("您可以吃鸭血面");
        }
        else {
            System.out.println("您可以吃小面");
        }
    }
}
  1. 定义两个int变量,交换两个变量的值。(常规解法:定义中间变量; 不使用中间变量:和, 异或)

​ int a = 3

​ int b = 2;

​ 交换后的结果:

​ a = 2;

​ b = 3;

package com.hqyj;

import java.util.Scanner;

public class LianXi {
    public static void main(String[] args) {
    Scanner scanner2 = new Scanner(System.in);
        System.out.println("请输入第一个变量(整数):");
        int bl1 = scanner2.nextInt();
        System.out.println("请输入第二个变量(整数):");
        int bl2 = scanner2.nextInt();
        int bl3 = bl1;
        System.out.println("交换前:" + bl1 + " , " + bl2);
        bl1 = bl2;
        bl2 = bl3;
        System.out.println("交换后:" + bl1 + " , " + bl2);
    }
}
  1. 在控制台输入数字(65 ~ 90), 如果不是65到90,打印”输入错误“;如果是65~90,打印出对应的字符
package com.hqyj;

import java.util.Scanner;

public class LianXi {
    public static void main(String[] args) {
    Scanner scanner3 = new Scanner(System.in);
        System.out.println("请您输入一个65-90的整数:");
        int number3 = scanner3.nextInt();
        if (number3 >= 65 & number3<= 90){
            char number3_1 = (char) number3;
            System.out.println(number3 + ":打印对应的字符为:" + number3_1);
        }
        else {
            System.out.println("输入错误");
        }
    }
}
  1. 指出下列代码中的问题
byte b1 = 5;
byte b2 = 6;
byte b3 = b1 + b2;

byte b3 = b1 + b2;程序会抛出异常, b1和b2相加会自动提升数据类型为int。
当一个java算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型将发生自动提升。
所有byte型、short型和char型将被提升到int型。

  1. 在控制台输入一个整数,打印除该数字是正数、负数、0。
package com.hqyj;

import java.util.Scanner;

public class LianXi {
    public static void main(String[] args) {
    Scanner scanner5 = new Scanner(System.in);
        System.out.println("请您输入一个的整数:");
        int number5 = scanner5.nextInt();
        if (number5 == 0){
            System.out.println(number5 + "是0");
        }
        if (number5 > 0){
            System.out.println(number5 + "是正数");
        }
        if (number5 < 0){
            System.out.println(number5 + "是负数");
        }
    }
}
  1. 控制台输入一个年份(如:2022),判断是否是闰年。(能被4整除,但不能被100整除; 能被400整除)
    }
package com.hqyj;

import java.util.Scanner;

public class LianXi {
    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
        System.out.println("请您输入一个年份(如:2022):");
        int year = scanner.nextInt();
        if (year % 4 == 0 & year % 100 !=0 | year % 400 == 0){
            System.out.println(year + "年是闰年");
        }
        else {
            System.out.println(year + "年不是闰年");
        }
    }
}

7.收银程序。控制台输入单价, 再输入数量, 再付款金额。打印除应收金额, 付款金额, 找零金额

package com.hqyj;

import java.util.Scanner;

public class LianXi {
    public static void main(String[] args) {
    
        Scanner scanner7 = new Scanner(System.in);
        System.out.println("请您输入一个单价:");
        double unit_rice = scanner7.nextDouble();
        System.out.println("请您输入一个数量:");
        int number7 = scanner7.nextInt();
        System.out.println("请您输入付款金额:");
        double fk_money = scanner7.nextDouble();
        double ys_money = unit_rice * number7;
        double zl_money = fk_money - ys_money;
        System.out.println("应收金额为:" + ys_money + ",  付款金额:" + fk_money + ",  找零金额为:" + zl_money);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值