数据类型和操作
Java为数值、字符值和布尔值提供了八种基本数据类型。每个类型都有它的取值范围,编译器会根据每个变量或者常量的数据类型为其分配内存空间。
从键盘中读取数值,上一篇我们已经讲过使用Scanner类中的nextDouble()方法来从键盘读取一个double数值。
nextByte():读取一个byte类型的整数
nextShort():读取一个short类型的整数
nextInt():读取一个int类型的整数
nextLong():读取一个long类型的整数
nextFloat():读取一个float类型的数
nextDouble():读取一个double类型的数
数值数据类型的操作符包括标准的算术操作符:加号(+)、减号(-)、乘号(* )、除号(/)和求余号(%)。
当除法的操作数都是整数时,除法的结果就是整数,小数部分被舍去。例如:5/2的结果是2 而不是2.5,为了实现浮点数的除法,其中一个操作数必须是浮点数,例如:5.0/2的结果是2.5。
取余符号一般用于正整数,但是实际上,它也可以用于负整数和浮点值。只有当被除数是负数时,余数才是负的。例如:-7%3结果是-1,-12%4结果是0,-26%-8结果是-2。
幂运算:使用方法Math.pow(a,b)来计算幂函数,pow方法定义在Java API的Math类中。
System.out.println(Math.pow(2, 3));
System.out.println(Math.pow(4, 0.5));
System.out.println(Math.pow(2.5, 2));
浮点型直接量带小数点,默认是double型的。例如,5.0被认为是double型而不是float型。可以通过数字后面加字母f或者F表示该数为float型直接量,也可以在数字后面加d或D表示该数为double型直接量。
System.out.println("double型的精度为:" + (1.0/3.0));
System.out.println("double型的精度为:" + (1.0f/3.0f));
//运行结果
double型的精度为:0.3333333333333333
float型的精度为:0.33333334
科学计数法:
显示当前时间:通过调用System.currentTimeMillis()返回当前时间。
在System类中的方法currentTimeMillis返回从GMT 1970年1月1日 00:00:00开始到当前时刻的毫秒数。时间戳是时间开始计时的点,因为1970年是UNIX操作系统正式发布的时间,所以这一时间也称为UNIX时间戳(UNIX epoch)。
可以使用这个方法获取当前时间,然后按照如下步骤计算出当前的秒数、分钟数和小时数:
1> 调用System.currentTimeMillis()方法获取1970年1月1日午夜到现在的毫秒数,并存放在变量totalMilliseconds中。
2> 通过总毫秒数totalMilliseconds除以1000得到总秒数totalSeconds。
3>通过totalSeconds % 60得到当前的秒数。
4> 通过totalSeconds除以60得到总的分钟数totalMinutes。
5> 通过totalminutes % 60获得总的小时数totalHours。
6> 通过将总分钟数totalMinutes除以60获得总的小时数totalHours。
7> 通过totalHours % 24 得到当前的小时数。
public class ShowCurrentTime {
public static void main(String args[ ]){
long totalMilliSeconds = System.currentTimeMillis();
System.out.println("1970年现在的毫秒数是:"+ totalMilliSeconds);
long totalSeconds = totalMilliSeconds / 1000;
System.out.println("毫秒数转换为秒数是:"+totalSeconds);
long currentSecond = totalSeconds % 60;
System.out.println("转换为现在的秒数:"+currentSecond);
long totalMinutes = totalSeconds / 60;
System.out.println("转换为总的分钟数:"+totalMinutes);
long currentMinute = totalMinutes % 60;
System.out.println("转换为现在的分钟数:"+currentMinute);
long totalHours = totalMinutes / 60;
System.out.println("转换为全部时钟数:"+totalHours);
long currentHour = totalHours % 24;
System.out.println("转换为现在的时钟数:"+currentHour);
System.out.println("Current time is " + currentHour + ":" + currentMinute + ":" + currentSecond + " GMT");
}
}
增强赋值运算符:count = count + 1; 等价于 count+=1;
自增和自减操作符(++ ,–)对变量进行加一和减一操作。
数值类型转换:通过显式转换,浮点数可以被转换为整数。
在一个二元运算中,其中一个操作数是整数,而另一个操作数是浮点数,Java会自动地将整数转换为浮点值。
总是可以将一个数值赋给支持更大数值范围类型的变量,例如,可以将long型的值赋给float型变量。但是如果不进行类型转换,就不能将一个值赋给较小类型的变量(强行的话会造成编译错误,精度损失)。Java将自动扩展一个类型,但是,缩窄类型必须显示完成。
类型转换的语法要求目标类型放在括号内,紧跟其后的是要转换的变量名货值。例如下,
System.out.println((int)1.7);
注意:类型转换不改变被转换的变量。例如,下面代码中的 d 在类型转换之后值不变:
double d = 4.5;
int i = (int)d; // i becomes 4, but d is still 4.5
Java 中,xl op= x2 形式的增强賦值表达式,执行为 xl = (T)(xl op x2), 这里T是xl的类型。因此,下面代码是正确的:
int sum = 0;
sum += 4.5; //sum becomes 4 after this statement
sum += 4.5 等价于 sum = (int)(sum+4.5);
switch语句
提示:switch语句是基于变量或者表达式的值来执行语句。
过多的使用 if 语句会使程序很难阅读。Java提供switch语句来处理多重条件问题。
switch (status){
case 0: compute tax for single filers;
break;
case 1: compute tax for married jointly or qualifying widow(er);
break;
case 2: compute tax for married filling separately;
break;
case 3: compute tax for head of household;
break;
default: System.out.println("Error: invalid status");
System.exit(1);
}
switch的完整语法:
switch (switch 表达式){
case 值1:语句(组)1;
break;
case 值2:语句(组)2;
break;
case 值3:语句(组)3;
break;
case 值n:语句(组)n;
default:默认情况下执行的语句(组);
}
switch必须遵守以下规则:
第一、switch表达式必须能计算出一个char、byte、int、short或者String型值,并且必须总是要用括号括住。
第二、value1、…valueN必须与switch表达式的值具有相同的数据类型。注意value1…valueN都是常量表达式,其中不含变量的,例如不允许出现1+x。
第三、switch表达式的值与case语句的值相匹配时,执行从该case开始的语句,直到遇到一个break语句或到达该switch语句的结束。
第四、默认情况是可选的,break语句会立刻终止switch语句。
示例代码:第一天到第五天显示Weekdays,第0和第6天显示Weekends。
switch(day){
case 1:
case 2:
case 3:
case 4:
case 5:System.out.println(“Weekdays”); break;
case 0:
case 6:System.out.println(“Weekend”);
}
条件表达式:boolean-expression ? expressionl : expression?; (布尔表达式 ?表达式 1: 表达式 2 )
如果布尔表达式的值是true,则条件表达式的结果为表达式 expression1 ; 否则,结果为表达式 expression2。
例如:max = (num1 > num2) ? num1 : num2;
注意:符号 ?和 :在条件表达式中同时出现。它们构成一种条件操作符,因为操作数有三个,所以称为三元操作符(ternary operator)。它是 Java 中唯一的三元操作符。