本帖最后由 哈哈大圣 于 2018-11-15 09:33 编辑
---
问题,一个小球离地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++强类型语言类似,却要与JavaScript、Python等弱语言区分开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);
|