运算符
1.赋值运算符:
在前面的学习中,使用最多的是什么呢?那就是"="。例如:
int money = 1000; //存储本金
使用"="将数值1000放入变量money的存储空间中,"="称为赋值运算符。例如:
double height = 177.5;
int weight = 78;
问题:
学员王浩的java成绩是80分,学员张萌的java成绩与王浩相同,输出张萌的成绩。
示列1:
publice class OperatorDemo{
publice static void main (String[] args){
int wangScore = 80; //王浩成绩
int zhangScore; //张萌成绩
zhangScre = wangScore;
System.out.println("张萌的成绩是:" + zhangScore);
}
}
由示列1可知,"=" 可以将某个数值赋值给变量,或是将某个表达式的赋值给变量。表达式就是符号(如加号,减号)与操作数(如b、3等)的组合。例如:
int b;
int a = (b + 3) * (b-1);
注意:
最后一个语句将变量b的值取出后进行计算,然后将计算结果存储到变量a中。如果写成"(b + 3) * (b - 1) = a",则会出错。切记,"=" 的功能是将等号右边表达式的结果赋值给等号左边的变量。
2.算术运算符
我们小时候就开始学习如何进行算术运算了。最简单的算术运算是加、减、乘、除。那么,如何编写程序让计算机来完成算术运算呢?java中提供运算功能的就是算术运算符,它的主要使用数值操作数进行数学计算。下面展示了常用的算术运算符。
常用算术运算符
运算符 | 说明 | 举例 |
---|---|---|
+ | 加分运算符,求操作数的和 | 5+3 等于8 |
- | 减法运算符,求操作数的差 | 5-3 等于2 |
* | 乘法运算符,求操作数的乘 | 5*3 等于15 |
/ | 除法运算符,求操作数的商 | 5/3 等于1 |
% | 取余运算符,求操作数相除的余数 | 5%3 等于2 |
下面就使用java提供的算术运算符来解决一个简单的问题
问题:
从控制台输入学员王浩的三门成绩(STB、java、SQL)的成绩,编写程序实现:java课程和SQL课程的分数之差;三门课程的平均分。
分析:
先声明变量来存储数据,数据来源于用户从控制台中输入的信息;然后进行计算并输出结果。
示列2:
import java.util.Scanner;
public class ScoreStat {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("STB的成绩是:");
int stb = input.nextInt(); //STB成绩
System.out.println("java的成绩是:");
int java = input.nextInt(); //java成绩
System.out.println("SQL的成绩是:");
int sql = input.nextInt(); //SQL成绩
int diffen; //声明int变量的类型,存储分数差
double avg; //声明double类型的变量,存储平均分
System.out.println("----------------------------------------");
System.out.println("STB\tjava\tSQL");
System.out.println(stb + "\t" + java + "\t" + sql);
System.out.println("----------------------------------------");
diffen = java -sql; //计算Java和SQL的成绩差
System.out.println("java和SQL的成绩差:" + diffen);
avg = (stb + java + sql) /3; //计算平均分
System.out.println("3门课的平均分是:" + avg);
}
}
示列2与前面不同的是,可以从控制台输入数据,然后把它存储在已经定义好的变量中,而不是直接在程序中给变量进行赋值。这种交互是通过两行代码来实现的。
Scanner input = new Scanner(System.in);
int stb = input.nextInt();
这两行代码的作用就是通过键盘的输入得到STB的成绩。这是java所提供的从控制台获取键盘输入的功能,就像System.out.println("")
可以向控制台输入信息一样。这里,获取的是一个整型变量,因此调用nextln()
方法。需要注意的是要使用这个功能,必须java源代码的第一行写上如下语句。
`import java.utli.Scanner;`
或者
`import java.util.*;`
后面会解释,只需要记住它的写法即可。
另外,算术运算符的使用基本上和平时进行的加减乘除运算一样,也遵守"先乘除后加减,必要时加上括号表示运算的先后循序"的原则。要特别注意的是,在使用“/”运算符进行运算时,一定要分清那一部分是被除数,必要时应加上括号。例如:Systrm.out.println(2+4+6/2);
以上代码计算的是2+4+(6/2),而不是(2+4+6)/2。另外,还有两个非常特殊且有用的运算符:自加运算符“++”和自减运算符“++”运算符只需要一个操作数例如;
int num = 3;
int num2 = 2;
num++;
num2--;
这里,“num++”等价于“num = num+1”,“num2--”等价于“num2 = num2-1;。
3.数据类型转换
1.为什么需要数据类型转换
问题:某班第一次考试平均分是81.29,第二次比第一次增加了2分,第二次的平均分是多少?
分析:有时候会遇到这样的情况:必须将一个int数据类型的变量与一个double数据类型的变量相加。那么不同的数据类型能进行运算吗?运算的结果又是什么数据类型呢?
2.如何进行数据类型转换
1)自动数据类型转换
示列3:
public clacc AutoTypeChange{
public static void main(String[] args){
double firstAvg = 81.29; //第一次考试的平均分
double secondAvg; //第二次考试的平均分
int rise = 2; //增长的分数
secondAvg = firstAvg +rise; //自动类型转换
System.out.print("第二次平均分是:"+secondAvg); //显示第二次考试平均分
}
}
doublie 型变量和int型变量相加后,计算的结果赋给一个double型变量,这时就发生了自动类型转换
规则1:如果一个操作数位double类型,则整个表达式可提升为double类型。
规则2:满足自动转换的条件。
两种类型要兼容:数据类型(整型和浮点型)互相兼容
目标类型大于源目标型:double类型可以存放int类型数据,因为为double类型变量分配的空间宽度足够存储int类型变量。因此我们把int类型
问题:
去年Apple笔记本所占的市场份额是20%,去年增长的市场份额是9.8%,求今年所占的份额?
分析:
不难发现计算方法并不难,原有的市场份额加上增长的市场份额便是现在所占的市场份额。因此,可以声明一个int类型变量before来存储去年的市场份额,一个double类型变量rise来存储增长的部分。但是如果直接将这两个变量的值相加,然后将计算结果直接赋给一个int类型的变量now会提示出问题吗?尝试后发现MyEclipse会提示"类型不匹配"的信息。
示列4:
publice class TypeChange{
publice static void main(String[] args){
int before = 20; //Apple笔记本市场份额
double rise = 9.8; //增长的份额
//计算新的市场份额(double类型变量强制转换成int类型变量)
int now = before + (int)rise; //现在的份额
System.out.printl("新的市场份额是:" + now);
}
}
示列4给出了解决方案,运行结果如下
**新的市场份额是:29**
根据类型提升规则,表达式(before + rise)的值应该是double类型,但是最后的结果却是要转变成int类型变量now,由于不能进行放大转换,因此必须进行显式地强制类型转换。
语法:
(数据类型)表达式
在变量前加上括号,括号中的类型就是要强制转换成的类型。例如:
double d = 34.5634;
int b = (int)d;
运行后b的值如下:
34
从示列中可以看出,由于强制类型转换往往是从宽度大的类型转换成宽度小的类型,使数值损失了精度(如2.3变成了2,34.5634变成了34),因此可以
4.double类型
事物往往有真还有假之分,如在判断一件艺术品的时候说:“这是真的” 或 “这是假的”。另外,也会做一些这样的判断,如 “地铁2号线的首发时间是5:00吗?” 、“这次考试成绩在90分之上吗?” 、“健身俱乐部的年费低于1000元吗?” 等,这些问题都需要经过判断。但答案只能有两个,要么是真,要么是否。程序也一样,有时也需要判断真假。这时就需要一种数据类型,专门用来表示真和假。java中使用boolean类型表示真假。’‘boolean’’又称‘’布尔‘’,所以我们常说‘’布尔类型‘’。boolean是java的关键字,所有字母为大小写。
表示真假可以用boolean类型,那么怎么表示呢?其实boolean类型有两个值,而且只有这两个值,boolean类型的值如下所示。
boolean类型的值:
值 | 说 明 |
---|---|
true | 真 |
false | 假 |
5.关系运算符
现在知道了重新用boolean类型表示真和假,但是程序任何知道真假呢?程序可以通过比较大小、长短、多少等得知其真假。java提供一种可以比较大小、长短、多少等运算符,这就是关系运算符。java语言中提供了关系运算符。如下所示。
关系运算符:
关系运算符 | 说 明 | 举 例 |
---|---|---|
> | 大于 | 99>100,结果为false |
< | 小于 | 大象的寿命<乌龟的寿命,结果为true |
>= | 大于等于 | 你的考试成绩>=200,结果为false |
<= | 小于等于 | 每次的考试成绩<=60分,结果为flase |
== | 等于 | 地球的大小==篮球的大小、结果为false |
!= | 不等于 | 水的密度!= 铁的密度,结果为false |
从上所示可以看出,关系运算符是用来做比较运算的,而比较的结果是一个boolean类型的值,要么是真(true),要么是假(flase)。
问题:
从控制台输入张三同学的成绩,与李四的成绩(80分)进行比较,然后输出‘’张三成绩比李四成绩高吗?‘’这句话的判断结果。
分析:
程序要实现的功能可以分为以下两部分。
- 从键盘获取数据。
- 比较数据,并输出比较结果。
示列5:
import java.util.Scanner;
public class BoolTest {
public static void main(String[] args) {
//java输入的一种方法
Scanner input = new Scanner(System.in);
int lisi = 80; //学员李四的成绩
boolean isBig; //声明一个boolean类型的变量
System.out.println("输入学员张三的成绩:"); //提示要输入学员张三的成绩
int zhangSan = input.nextInt(); //输入张三的成绩
isBig = zhangSan > lisi; //将比较的结果保存在boolean变量中
System.out.println("张三成绩比李四高吗?" + isBig); //输出比较结果
}
}
由示列5可见,和所有其他数据类型一样,在使用boolean类型之前,也需要进行声明和赋值,如下所示。
boolean isBig; //声明一个boolean类型的变量
isBig = zhangSan > lisi; //将比较的结果保存在boolean变量中
比较的结果是一个boolean类型的值,结果为‘’假‘’,因此示列5的输出结果为false。