1.数值变量
1.1变量类型
- byte:字节型
- short:短整型
- int:整形
- long:长整形
- float:浮点型(用来表示小数)
- double:双精度形
声明语句的格式为:“变量类型 变量名称 = 具体的数值;”
看一个声明数值变量代码的例子
public static void main(String[] args) {
int zhumulanma; // 先声明变量
// 8844是2005年中国测量得到的珠穆朗玛峰岩面高度,8848是冰雪高度
zhumulanma = 8844; // 再对变量赋值
System.out.println("珠穆朗玛峰的高度=" + zhumulanma);
double yuanzhoulv = 3.1415926; // 在声明变量之时就初始化赋值
System.out.println("圆周率=" + yuanzhoulv);
}
1.2特殊数字的表达
- 二进制:以0B或者0b开头,后面的数字只能是0或者1
- 八进制:以0开头,后面数字是0-7
- 十六进制:以0x或者0X开头,后面数字可以0-9,a-f
- 各种进制赋值代码如下
public static void main(String[] args) {
int binary = 0b11; // 二进制数,0b也可以写成0B
System.out.println("binary=" + binary);
int octonary = 011; // 以0开头,后面非bB非xX的就是八进制数
System.out.println("octonary=" + octonary);
int hexadecimal = 0x11; // 十六进制数,0x也可以写成0X
System.out.println("hexadecimal=" + hexadecimal);
int hexLetter = 0xff; // 十六进制数不区分大小写,如ff也可以写成FF
System.out.println("hexadecimal=" + hexLetter);
int decimal = 11; // 没有任何前缀,则默认为十进制数
System.out.println("decimal=" + decimal);
}
输出如下,可见将各种进制都转换为十进制输出
1.3强制类型转换
在编码过程中,不但能将某个数字赋值给某个变量,还需要将一个变量赋值给另一个变量,示例如下:
public static void main(String[] args) {
int changjiang = 6397; // 长江的长度为6397千米
System.out.println("changjiang=" + changjiang);
int longRiver = changjiang; // 把一个整型变量赋值给另一个整型变量
System.out.println("longRiver=" + longRiver);
// long changjiang = 6397;
// // 若把长整型变量直接赋值给整型变量,编译器会提示错误
// //int longRiver = changjiang; // 把长整型变量赋值给整型变量,注意编译器会报错
// // 不同类型的变量相互赋值,需要在原变量前面添加“(新类型)”表示强制转换类型
// int longRiver = (int) changjiang; // 把长整型数强制转成整型数
long worldPopulation = 7444443881L; // 截至2018年元旦,世界人口大约有74亿
System.out.println("worldPopulation=" + worldPopulation);
// 把长整型数赋值给整型数会丢失前四个字节
int shijierenkou = (int) worldPopulation; // 把长整型数强制转成整型数
System.out.println("shijierenkou=" + shijierenkou);
// 3.1415926是中国古代数学家祖冲之求得的圆周率数值,又称祖率
double zulv = 3.1415926;
System.out.println("zulv=" + zulv);
// 把双精度数赋值给浮点数会丢失数值精度
float pai = (float) zulv; // 把双精度数强制转成浮点数
System.out.println("pai=" + pai);
double jiage = 9.9; // 某商品定价为9.9元
System.out.println("jiage=" + jiage);
// 把小数赋值给整型变量,会直接去掉小数点后面部分,不会四舍五入
int price = (int) jiage; // 把双精度数强制转成整型数
System.out.println("price=" + price);
}
输出如下:
changjiang=6397
longRiver=6397
worldPopulation=7444443881
shijierenkou=-1145490711
zulv=3.1415926
pai=3.1415925
jiage=9.9
price=9
可见,相同变量之间互相赋值完全没有问题,如果是把长整形赋值给整形变会报错,高精度赋值给低精度会导致字节丢失。
2.算术运算
2.1四则运算
加法:+
减法: -
乘法:*
除法 :/
取余 :%
简单示例:
ublic static void main(String[] args) {
int sum = 1 + 2; // 求两数相加之和
System.out.println("sum=" + sum);
int differ = 7 - 3; // 求两数相减之差
System.out.println("differ=" + differ);
int product = 5 * 6; // 求两数相乘之积
System.out.println("product=" + product);
int quotient = 81 / 9; // 求两数相除之商
System.out.println("quotient=" + quotient);
int remainder = 40 % 3; // 求两数相除之余数
System.out.println("remainder=" + remainder);
// 被除数和除数都是整数,则求得的商为去掉小数部分的整数
int quotientInt = 25 / 4;
System.out.println("quotientInt=" + quotientInt);
// 被除数和除数只要有一个是浮点或双精度数,则求得的商保留小数部分
double quotientDouble = 25.0 / 4; // 25/4.0的运算结果跟25.0/4是一样的
System.out.println("quotientDouble=" + quotientDouble);
// 因float和double类型为约数表示,故相除得到的商也是约数,不能保证小数部分是精确的
double quotientDecimal = 8.1 / 3;
System.out.println("quotientDecimal=" + quotientDecimal);
// 对浮点数和双精度数求余数,也存在约数造成的问题,即余数的小数部分可能并不准确
double remainderDecimal = 5.1 % 2;
System.out.println("remainderDecimal=" + remainderDecimal);
}
运行结果:
sum=3
differ=4
product=30
quotient=9
remainder=1
quotientInt=6
quotientDouble=6.25
quotientDecimal=2.6999999999999997
remainderDecimal=1.0999999999999996
2.2 一元运算符
简单举例:要注意JAVA不存在自乘(**)和自除(//)的运算
- x=x+7可以写成:x+=7
- x=x+1可以写成:x+=1或者x++
2.3数学函数
2.2.1 取整函数
public static void main(String[] args) {
double decimalPositive = 9.9;
// 注意下面的9.4999999999999999,取整之后会变成10。
// 这是因为9.4999999999999999超出了双精度数的精度范围,Java会先将其转为近似9.5的小数,再进行取整操作
long roundPositive = Math.round(decimalPositive); // 四舍五入
double floorPositive = Math.floor(decimalPositive); // 往下取整,也就是往数值小的方向取整
double ceilPositive = Math.ceil(decimalPositive); // 往上取整,也就是往数值大的方向取整
double decimalNegative = -9.9;
long roundNegative = Math.round(decimalNegative); // 四舍五入
double floorNegative = Math.floor(decimalNegative); // 往下取整,也就是往数值小的方向取整
double ceilNegative = Math.ceil(decimalNegative); // 往上取整,也就是往数值大的方向取整
double absoluteValue = Math.abs(decimalNegative); // 取绝对值
}
2.2.2 取随机数
概率统计经常用到随机数,但是random函数只能生成小于1的随机小数(包括0和1),但是引入Random随机数工具,实例化之后nextFloat可以生成float类型随机浮点小数,nextDouble生成double类型随机双精度小数等等,放一个简单示例:
public static void main(String[] args) {
double decimal = Math.random(); // 生成小于一的随机小数(包括0和正小数)
int integer = new Random().nextInt(); // 生成随机整数(包括负数)
long long_integer = new Random().nextLong(); // 生成随机长整数(包括负数)
float float_decimal = new Random().nextFloat(); // 生成随机的浮点小数(不包括负数)
double double_decimal = new Random().nextDouble(); // 生成随机的双精度小数(不包括负数)
int hundred = new Random().nextInt(100); // 生成一百以内的随机整数(0≤随机整数<100,即包括0但不包括100)
}
2.3.3 科学计算函数
如开方,幂运算,求对数等等,一段代码走起~
public static void main(String[] args) {
double nine = 9;
double sqrt = Math.sqrt(nine); // 开平方。对应数学符号√ ̄
// 求n次方。pow的第一个参数为幂运算的底数,第二个参数为幂运算的指数
double pow = Math.pow(nine, 2);
double five = 5;
double exp = Math.exp(five); // 求自然常数e的n次方
double log = Math.log(exp); // 求自然对数,为exp方法的逆运算。对应数学函数lnN
double log10 = Math.log10(100); // 求底数为10的对数。对应数学函数logN
}
2.3.4 三角函数
Math库还提供了几何方面的三角函数运算,包括正弦,余弦,正切,反正弦,反余弦,反正切等等,但是Math库三角函数用法不同,使用弧度制而不是角度制,来段代码清晰明了:
public static void main(String[] args) {
double angle = 60; // 三角函数的角度
// 弧度=该角度对应的弧长/半径。数学函数库Math专门提供了常量PI表示圆周率π的粗略值
double radian = angle * Math.PI / 180;
double sin = Math.sin(radian); // 求某弧度的正弦。求反正弦要调用asin方法
double cos = Math.cos(radian); // 求某弧度的余弦。求反余弦要调用acos方法
double tan = Math.tan(radian); // 求某弧度的正切。求反正切要调用atan方法
// 求某弧度的余切。Math库未提供求余切值的方法,其实余切值就是正切值的倒数
double ctan = 1.0 / tan;
}
总结
- 学会不同类型的数值变量的赋值以及强制类型转换
- 学会简单数学运算用Java实现
- 学会调用数学函数库的常用函数