JavaSE(2)(简单了解idea, 项目结构,运算符,数据转换,原反补码)

发布时间 2023-08-24 15:51:20作者: 大宝贝94106

JavaSE(2)(简单了解idea, 项目结构,运算符,数据转换,原反补码)

p28 idea 项目结构

project 项目 > module 模块 > package 包 > class 类

拿微信举例, 微信就是项目, 它下方的四大功能(微信,通讯录,发现,我)就是模块, 一个项目是包含一个或多个模块的. 以第一个微信模块为例, 我们把相同功能的代码放在一个中, 在包里面就是编写代码的.

p29 idea设置

设置注释(comments)字体颜色 : Settings - Editor - Color Scheme - Language Defaults - Line comment

设置自动导包 : Settings - Editor - General - Auto Import - 勾选 Add... 和 Optimize...两个选项.

自动提示时忽略大小写 : Settings - Editor - General - Code completion - 去掉Match case的勾选

添加背景图片 : Settings - Appearance&Behavior - Appearance - UI Options - Background Image...

IDEA 的项目和模块的操作

添加模块 : File - Project Structure - Modules - + - New Modules

p30 运算符

+, - ,* : 和数学中功能一样, 在代码中, 如果有小数参与计算, 有可能不精确.

/ (除) : 1. 整数参与计算, 结果只能得到整数. 2 . 如果有小数参与计算, 有可能不精确.

%(取模) 的应用场景 :

  1. 来判断, A是否可以被B整除.
  2. 可以判断A是否为整数.
  3. 比如, 斗地主发牌, 3格玩家, 把每一张牌都定义一个序号. 拿序号%3, 如果结果为1, 就发给玩家1, 结果为2, 就发给玩家2, 结果为0, 就发给玩家3.

练习1 , 需求 : 键盘录入一个三位数, 将其拆分为个位, 十位, 百位后, 打印在控制台.

公式总结:

个位 : 数值 % 10

十位 : 数值 / 10 % 10

百位 : 数值 / 100 % 10

千位 : 数值 / 1000 % 10 ...

 public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入整数:");
        int i = scanner.nextInt();
        System.out.println("个位是"+i%10);//个位
        System.out.println("十位是"+i/10%10);//十位
        System.out.println("百位是"+i/100%10);//百位
    }

p31 隐式转换和强制转换

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

隐式转换(自动类型提升) : 取值范围小的数 , 转换为, 取值范围大的数. 小 >> 大

​ - 取值范围小的, 和取值范围大的进行运算, 小的会先提升为大的, 再进行运算.

​ - byte , short , char 三种类型的数据在运算时, 都会直接先提升为 int , 然后再运算.

强制转换 : 取值范围大的数, 转换为, 取值范围小的数. 大 >>小

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

​ 强制转换有可能出现错误.

double a = 1.1;
int b = (int)a;//double >> int
//-------------------
byte b1 = 10;
byte b2 = 20;
byte result (byte)(b1 + b2) ;//int >> byte
System.out.println(result) ;

p32 字符串和字符的加操作

当 "+" 操作中出现字符串时, 这个 "+" 就是字符串连接符, 会将前后数据拼接, 产生新字符串.

"123" + 123 >> "123123"

连续 "+"时, 从左到右逐个执行.有字符串参与就是拼接, 没有就是加法.

1 + 99 + "年" >> "100年"

1 + 2 + "abc" + 2 + 1 >> "3abc21"

字符相加

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

'a' = 97 'A' = 65 对应的数值

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

p33 自增 自减运算符

单独使用 : ++ 和-- 无论放在变量的前面还是后面, 单独一行结果是一样的.

参与运算 :

// 1. 后++ : 先用后加
int a = 10;
int b = a++; //先把10赋值给b
//结果 : a = 11 , b = 10 .

// 2. 前++ : 先加后用
int a = 10;
int b = ++a; //先自加,再把11赋值给b
//结果 : a = 11 , b = 11 .

p34 赋值运算符

符号 作用 说明

= 赋值 int a = 10

+= 加后赋值 a+=b,将a+b的值给a

-= 减后赋值 a-=b,将a-b的值给a

= 乘后赋值 a=b,将a*b的值给a

/= 除后赋值 a/=b,将a/b的商给a

%= 取余后赋值 a%=b,将a/b的余数给a

扩展的赋值运算符在底层都隐藏了一个强制类型转换.

关系运算符

关系运算符的结果都是boolean类型, 要么是true, 要么是false.

p 35 逻辑运算符

& - 逻辑与(且) 全是true ,才是true 两边都要满足

| - 逻辑或 全是false, 才是false, 只要有一个true 就为true 两边满足一个

应用场景 : 登录界面, 用户名和密码,必须都正确才能登陆成功.(&)

都要,就是 (&), 有一样就行,那是 (|)

^ - 逻辑异或 相同为false, 不同为true 比如结婚, 同性不能, 异性可以

! - 逻辑非 取反

p36 短路逻辑运算符

&& - 短路与 结果和 & 相同, 但有短路效果, 效率会比较高

|| - 短路或 结果和 | 相同, 但有短路效果, 效率会比较高

短路效果就是: 当左边的表达式能确定最终结果, 那么右边就不会参与运行了.

int a = 10;
int b = 10;
boolean result = ++a < 5 && ++b < 5;//左边已经是false了,右边就不运行了
System.out.println(result) ;
System.out.println(a) ;
System.out.println(b) ;//所以变量b就不再++了,结果是10

& , | - 无论左边是 true 还是 false , 右边都要执行.

&& , || - 如果左边能确定整个表达式的结果, 右边就不执行.

&& - 左边为false, 右边不执行.

|| - 左边为true, 右边不执行.

最常用的逻辑运算符 : && ,|| , !.

练习: 数字6

数字6 , 需求 : 录入两个整数, 如果其中一个为6, 最终结果输出true.
如果他们的和为6的倍数,最终结果输出true.其它情况都是false.

import java.util.Scanner;
/*
练习3 数字6 , 需求 : 录入两个整数, 如果其中一个为6, 最终结果输出true.
如果他们的和为6的倍数,最终结果输出true.其它情况都是false.
 */
public class helloWorld {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入第一个数:");
        int n1 = scanner.nextInt();
        System.out.println("输入第二个数:");
        int n2 = scanner.nextInt();
        //三个条件只要满足一个就行, n1 == 6, n2 == 6, (n1 + n2) % 6 == 0 ,把它们用||连接
        boolean n6 = n1 == 6 || n2 == 6 || (n1 + n2) % 6 == 0 ;
        System.out.println(n6);
    }
}

p37 三元运算符

格式 : 关系表达式 ? 表达式1 : 表达式2 ;

关系表达式为true, 表达式1的值就是结果, 如果关系表达式为false, 表达式2的值就是结果

整个三元运算符的结果必须被使用

练习: (用三元运算符做判断) 需求 : 分别录入两人体重, 实现判断两人体重是否相同,结果输出 相 同或不同.

 public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("第一个人的体重:");
        int weight1 = s.nextInt();
        System.out.println("第二个人的体重:");
        int weight2 = s.nextInt();
        String result = weight1 == weight2 ? "体重相同" : "体重不同";
        System.out.println(result);
    }

练习: (用三元运算符做判断) 需求 : 获取三个数的最大值.

 public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
            System.out.println("第一个数");
            int n1 = sc.nextInt();
            System.out.println("第二个数");
            int n2 = sc.nextInt();
            System.out.println("第三个数");
            int n3 = sc.nextInt();
            int temp = n1 > n2 ? n1 : n2;//n1,n2比较 ,大的赋值给temp
            int max = temp > n3 ? temp : n3;//temp,n3比较, 大的赋值给max
            System.out.println("最大的数是:" + max);
    }

ctrl + alt + L 格式化代码

运算符的优先级

小括号优先于所有, 你想要让谁优先计算就用小括号把它括起来

p38 原码,反码,补码

原码

十进制数据的二进制表现形式, 最左边是符号位, 0为正, 1为负

原码的弊端

利用原码进行计算时, 如果是正数完全没问题.

但是如果是负数计算, 结果就出错, 实际运算方向, 跟正确的运算方向是相反的.

反码出现的目的

为了解决原码不能计算负数的问题而出现的。

反码的计算规则

正数的反码不变,负数的反码在原码的基础上,符号位不变。数值取反,0变1, 1变0。

反码的弊端

负数运算的时候,如果结果不跨0,是没有任何问题的,但是如果结果跨0,跟实际结果会有1的偏差。

补码出现的目的

为了解决负数计算时跨0的问题而出现的。

补码的计算规则

正数的补码不变,负数的补码在反码的基础上+1。

另外补码还能多记录一个特殊的值-128,该数据在1个字节下,没有原码和反码。

补码的注意点

计算机中的存储和计算都是以补码的形式进行的。

& - 逻辑与 : 两个数字的二进制形式比较, 都是1就为1,(同上)

| - 逻辑或 : 两个数字的二进制形式比较, 有一个1就为1,

<< - 左移 : 向左移动, 低位补0 , 左移一位就相当于*2.

(>>) - 右移 : 向右移动, 高位正数补0, 负数补1, 右移一位就相当于/2.

(>>>) - 无符号右移 : 向右移动, 高位补0.