A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 哈哈大圣 于 2018-11-15 09:33 编辑

---
  • 小球弹跳10次问题
问题,一个小球离地100米,现在做自由落体运动,第一次落地后,又弹跳了上次高度的一般,有开始做自由落体运动,如此反复,每次弹跳都是上次高度的一般,求第十次落地所经过的路程,第十次落地后弹跳的高度。

[Java] 纯文本查看 复制代码
public class JavaLearn.datastructure.datastructure.linkedList.bannerySearchTree.Main {

    public static void main(String[] args) {
        // 小球10次跳动问题
        double initialHeight = 100.00; //这个是初试的高度
        double currentHeight = initialHeight; // 记录当前周期的高度
        double sumOver = 0.0; // 记录经过的路径
        for (int i = 0;i < 10; i++){
            sumOver += currentHeight * 1.5;
            currentHeight /= 2.0;
        }
        sumOver -= currentHeight;
        System.out.println(sumOver); // 第十次弹跳的高度。
        System.out.println(currentHeight); // 第十次反弹后的高度。
    }
}


---

2. 数据类型的转换
数据类型不一样时,会发生数据类型转换,有两种形式:
隐式转换(自动类型转换):精度低的转换为精度高的(范围小的转换为范围大的)
显示类型转换(强制类型转换):手动转换

注意:谨慎使用强制类型转换(数据溢出,精度减小)
对于byte,short 类型,JVM进行了优化,右边是int类型且是常量类型且不超过左边的范围是可以进行转换的。如果右侧参与了运算就不会进行进行这种优化,如果是类似于 `byte a += 5` 这种情况,底层也进行了优化。`格式`:小类型 名 = (小类型) 大类型数据

JVM针对于:byte/short/char类型转换的优化,如下演示:
[Java] 纯文本查看 复制代码
byte a = 10; // 正确
a += 5; // 正确
a = a + 5; //错误
byte b = a + 5; // 错误

byte c = 6;
byte d = 7;
byte f = c + d; // 错误由于自动转换为int类型进行计算,

byte res = 5 + 6; // 正确,因为右侧全是常量,这种叫做常量优化机制



byte/short/char这三种类型都可以发生数学运算
都会被提升为int类型,然后进行运算,注意:这里的char运算会涉及到ASCII操作,C/C++强类型语言类似,却要与JavaScriptPython等弱语言区分开boolean类型不能发生数据类型转换


ASCII表该记住的一些东西
[Java] 纯文本查看 复制代码
48 '0'
65 'A'
97 'a'

数字和字符的对照关系表(编码表)
ASCII 码表:American Standard Code for Information Interchange;美国信息交换标准代码
Unicode码表:万国码
UTF-8码表:

[Java] 纯文本查看 复制代码
public class JavaLearn.ChangeStyle {

    public static void main(String[] args){
        // 强制类型转换,适用于高转低,大转小
        int num = (int) 123.456;

        int num2 = (int)6000000000L; // 数据溢出
        System.out.println(num2); //1705032704
        System.out.println('A' + 1); // 66  ASCII码操作

        byte num4 = 40;
        byte num5 = 50;
        // byte/short/char计算时会提升为int进行计算
        // 右侧的数值大小不能超过左侧的类型范围
        int result1 = (int)(num4 + num5);
        System.out.println(result1);

        char zifu3 = 'c';
        int znum = zifu3; // char --> int 从小到大
        System.out.println(znum);
    }
}



---

3. 运算符
运算符的优先级:括号 . ! (||) (|) 比较运算符 && || 赋值运算符 ==


一、基础运算符
  • 加 +
  • 减 -
  • 乘 *
  • 除 /
  • 取模,求余 %,不仅对Int类型可以求余,也可以用于float

注意 System.out.println(5 / 2);的结果为2,因为默认为int类型,值也是int类型


加号的三种用法:
  • 对于数值来说,就是加法
  • 对于char类型的,提升为int
  • 对于字符串与字符串/数值/char,是拼接效果

二、自增于自减
自增 ++  分为前加加(先加后用),后加加(先用后加)
自减 --  (与++一样的效果)


如下演示 假如 i = 10;
i++ ++i a = i ++ a = ++i System.out.print(i++)
11 11 a = 10 a = 11 10

三、赋值运算符
  • +=  比如` a += 5;` 等同于`a = a + 5;`
  • -=
  • /=
  • *=
  • %=

四、比较运算符
  • >
  • >=
  • <
  • <=
  • ==
  • !=

五、逻辑运算符
  • !  非
  • && 与
  • || 或

"&&" "||" 具有短路效果,如果左边的判断已经确定了结果,这是右边的判断不会执行,这是底层优化



六、位运算符
  • & 位与        只有两个操作数对应位同为1时,结果为1,其余全为0
  • | 位或        只有两个操作数对应位同为0时,结果为0,其余全为1
  • ~ 位非        针对于一个数,取反
  • ^ 异或        异:1
  • << 左移动      符号位不变,低位补0。如:2<<2结果为8。
  • >> 右移动      低位溢出,符号位不变,并用符号位补溢出的高位
  • >>> 无符号右移  低位溢出,高位补0。注意,无符号右移(>>>)中的符号位(最高位)也跟着变

七、三元运算符
  • 一元运算符:只要一个数据 ! ++ -- ~
  • 二元运算符:两个数据 + - * / % = & && | || ...
  • 三元运算符:三个运算符
  • 格式:数据类型 变量名 = 条件? 表达式1 : 表达式2
  • 注意:两个表达式的计算结果必须符合左边的数据类型。

例如


[Java] 纯文本查看 复制代码
int a = 10, b = 20; c = 30;

int max = a > b ? (a > c ? a : b) : (b > c ? b : c);





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马