Day03:运算符和表达式 / 分支结构
Java 运算符
计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运算符分成以下几组:
- 算术运算符
- 关系运算符
- 位运算符
- 字符串运算符
- 自增自减运算符
- 条件(三目)运算符
- 逻辑运算符
- 赋值运算符
- 其他运算符
算术运算符
+、-*、/
注意:
除数不能是0,否则发生异常
先乘除后加减
改变优先级(即计算顺序)使用(),而且()可以嵌套使用
%求余,求模
自增自减运算符
++、--
++(--)号在后
先自增(减)取自增(减)前的值
++(--)号在前
先自增(减)取自增(减)后的值
实例:
public static void main(String[] args) {
int a=1;
int b=++a + ++a + a++;
int c=--a +a-- + --a;
System.out.println(b);
System.out.println(c);
}
}
关系运算符
>、<、>=、<=、==、!=
判断两个数值大小关系,运算结果为boolean类型(真或假)
位运算符
Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。
操作符 | 描述 | 例子 |
---|---|---|
& | 如果相对应位都是1,则结果为1,否则为0 | (A&B),得到12,即0000 1100 |
| | 如果相对应位都是0,则结果为0,否则为1 | (A | B)得到61,即 0011 1101 |
^ | 如果相对应位值相同,则结果为0,否则为1 | (A ^ B)得到49,即 0011 0001 |
〜 | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 | (〜A)得到-61,即1100 0011 |
<< | 按位左移运算符。左操作数按位左移右操作数指定的位数。 | A << 2得到240,即 1111 0000 |
>> | 按位右移运算符。左操作数按位右移右操作数指定的位数。 | A >> 2得到15即 1111 |
>>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 | A>>>2得到15即0000 1111 |
逻辑运算符
&&(与)、||(或)、!(非)
&&两边同时为真 结果为真
||两边有有一边真,结果为假
短路逻辑运算符
逻辑运算符的短路特性:
&&和||
false && ????
当&&左侧是false时,右侧表达式不会运行。
true || ????
当||左侧是true时,右侧表达式不会执行
当使用与逻辑运算符时,在两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了。
public static void main(String[] args){
int a = 5;//定义一个变量;
boolean b = (a<4)&&(a++<10);
System.out.println("使用短路逻辑运算符的结果为"+b);
System.out.println("a的结果为"+a);
}
解析: 该程序使用到了短路逻辑运算符(&&),首先判断 a<4 的结果为 false,则 b 的结果必定是 false,所以不再执行第二个操作 a++<10 的判断,所以 a 的值为 5。
赋值运算符
int x=5;
int y=10;
x=y;//y的值赋给x
将=右边的值赋给左边的变量
复合赋值运算符
+=、-=、*=、/=、%=
运算后,再赋给变量 隐式强转
int x=10;
x=+5;//x=(int)(x+5)
字符串连接运算符
+
将字符串与变量连接
条件(三目)运算符(?:)
语法:
(条件)?(条件为真时的取值):(条件为假时的取值);
实例:
variable x = (expression) ? value if true : value if false
instanceof 运算符
该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。
instanceof运算符使用格式如下:
( Object reference variable ) instanceof (class/interface type)
如果运算符左侧变量所指的对象,是操作符右侧类或接口(class/interface)的一个对象,那么结果为真。
Java运算符优先级
当多个运算符出现在一个表达式中,谁先谁后呢?这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大。
例如,(1+3)+(3+2)*2,这个表达式如果按加号最优先计算,答案就是 18,如果按照乘号最优先,答案则是 14。
再如,x = 7 + 3 * 2;这里x得到13,而不是20,因为乘法运算符比加法运算符有较高的优先级,所以先计算3 * 2得到6,然后再加7。
下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。
别 | 操作符 | 关联性 |
---|---|---|
后缀 | () [] . (点操作符) | 左到右 |
一元 | + + - !〜 | 从右到左 |
乘性 | * /% | 左到右 |
加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
关系 | >> = << = | 左到右 |
相等 | == != | 左到右 |
按位与 | & | 左到右 |
按位异或 | ^ | 左到右 |
按位或 | | | 左到右 |
逻辑与 | && | 左到右 |
逻辑或 | | | | 左到右 |
条件 | ?: | 从右到左 |
赋值 | = + = - = * = / =%= >> = << =&= ^ = | = | 从右到左 |
逗号 | , | 左到右 |
Java表达式:
数据和符号的组合。
Java (分支结构)条件语句 - if...else
根据条件可能运行也可能不运行
单分支、多分支结构
java程序的运行结构分类
(1)顺序结构
编写的代码一定会执行一次
(2)分支结构
编写的代码可能会执行一次
(3)循环结构
编写的代码可能会执行多次
一个 if 语句包含一个布尔表达式和一条或多条语句。
语法
单分支:
if 语句的语法如下:
if(布尔表达式)
{
//如果布尔表达式为true(真)将执行的语句
}
如果布尔表达式的值为 true,则执行 if 语句中的代码块,否则执行 if 语句块后面的代码。
多分支:
if...else语句
if 语句后面可以跟 else 语句,当 if 语句的布尔表达式值为 false 时,else 语句块会被执行。
语法
if…else 的用法如下:
if(布尔表达式){
//如果布尔表达式的值为true(真)
}else{
//如果布尔表达式的值为false(假)
}
if...else if...else 语句
if 语句后面可以跟 else if…else 语句,这种语句可以检测到多种可能的情况。
使用 if,else if,else 语句的时候,需要注意下面几点:
- if 语句至多有 1 个 else 语句,else 语句在所有的 else if 语句之后。
- if 语句可以有若干个 else if 语句,它们必须在 else 语句之前。
- 一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行。
语法
if...else 语法格式如下:
if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
//如果布尔表达式 3的值为true执行代码
}else {
//如果以上布尔表达式都不为true执行代码
}
注意实现:1.else-if数量不限,else可以省略。
2.更换条件顺序可能引发错误。
3.多重if结构,程序运行一次,只可能运行其中一个代码块。
嵌套的 if…else 语句
使用嵌套的 if…else 语句是合法的。也就是说你可以在另一个 if 或者 else if 语句中使用 if 或者 else if 语句。
语法
嵌套的 if…else 语法格式如下:
if(布尔表达式 1){
////如果布尔表达式 1的值为true执行代码
if(布尔表达式 2){
////如果布尔表达式 2的值为true执行代码
}
}
你可以像 if 语句一样嵌套 else if...else。
switch 结构
解决多分支的情况
switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
语法
switch case 语句语法格式如下:
switch(expression){
case 常量1 :
//语句
break; //退出
case 常量2 :
//语句
break;
...... //你可以有任意数量的case语句
default : //没有对应常量时运行
}
switch case 语句有如下规则:
switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。
当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。
switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。
switch case 执行时,一定会先进行匹配,匹配成功返回当前 case 的值,再根据是否有 break,判断是否继续输出,或是跳出判断。
多重if与switch结构特性:
多重if适合于判断一个值在一个范围内的情况
switch只能使用在等值判断时
switch灵活、效率高
实例:
单分支结构:
package JSD02;
import java.util.*;
public class Two {
public static void main(String[] args) {
//需求:用户输入一个年份,如果是闰年输出是闰年
//思路:(年份能被4整除,且不能被100整除,或者能被400整除的年份)
Scanner sr=new Scanner(System.in);
System.out.println("请输入年份:");
int nf=sr.nextInt();
if(nf%4==0&&nf%100!=0||nf%400==0) {
System.out.println("你输入的年份是闰年!");
}else {
System.out.println("你输入的不是闰年!");
}
}
}
多分支结构:
package JSD03;
public class One {
public static void main(String[] args) {
//需求:商场根据会员积分打折,
// 2000分以内打9折,
// 4000分以内打8折
// 8000分以内打7.5折,
// 8000分以上打7折,
// 计算出应缴金额:
int gwje=8000;
double dzh;
if(gwje<=2000) {
dzh=gwje*0.9;
System.out.println(dzh);
}else if(gwje<=4000){
dzh=gwje*0.8;
System.out.println(dzh);
}else if(gwje<=6000) {
dzh=gwje*0.75;
System.out.println(dzh);
}else {
dzh=gwje*0.7;
System.out.println(dzh);
}
}
}
switch结构:
package JSD03;
import java.util.*;
public class Three {
public static void main(String[] args) {
// 需求:选择一个形状(1长方形、2正方形、3三角形、4圆形)
// 根据不同的选择让用户输入不同的信息,
// 长方形有长和宽、
// 正方形有边长、
// 三角形有底和高、
// 圆形有半径,
// 计算输出指定形状的面积
Scanner sr=new Scanner(System.in);
System.out.println("请输入你选择的图形(1.长方形 2.正方形 3.三角形 4.圆形):");
int xz=sr.nextInt();
switch(xz) {
case 1:
System.out.println("请输入长方形的长:");
double cfxc=sr.nextDouble();
System.out.println("请输入长方形的宽:");
double cfxk=sr.nextDouble();
double mj=cfxc*cfxk;
System.out.println("长方形的面积为:"+mj);
case 2:
System.out.println("请输入正方形的长:");
double zfxc=sr.nextDouble();
System.out.println("请输入正方形的宽:");
double zfxk=sr.nextDouble();
mj=zfxc*zfxk;
System.out.println("正方形的面积为:"+mj);
case 3:
System.out.println("请输入三角形的底:");
double sjxd=sr.nextDouble();
System.out.println("请输入三角形的高:");
double sjxg=sr.nextDouble();
mj=sjxd*sjxg/2;
System.out.println("三角形的面积为:"+mj);
case 4:
System.out.println("请输入圆形的半径:");
double yxbj=sr.nextDouble();
mj=yxbj*yxbj*3.1415926;
System.out.println("圆形的面积为:"+mj);
}
}
}
分支结构集合:
package JSD03;
import java.util.*;
public class Two {
public static void main(String[] args) {
// 需求:机票价格按照淡季旺季、头等舱和经济舱收费、
// 输入机票原价、月份和头等舱或经济舱,
// 其中旺季(5-10月)头等舱9折,经济舱85折,
// 淡季(11月到来年4月)头等舱7折,经济舱65折,
// 最终输出机票价格:
Scanner sr=new Scanner(System.in);
System.out.println("请输入机票原价:");
int yj=sr.nextInt();
System.out.println("请输入月份:");
int yf=sr.nextInt();
System.out.println("请输入是头等舱还是经济舱(1.头等舱 2.经济舱):");
int cs=sr.nextInt();
if(yf>=5&&yf<=10) {
System.out.println("你输入的月份是旺季!");
switch(cs) {
case 1:
double tdc01=yj*0.9;
System.out.println("头等舱的价格为:"+tdc01);
break;
case 2:
double jjc01=yj*0.85;
System.out.println("经济舱的价格为:"+jjc01);
break;
}
}else if(yf<5||yf<=12&&yf>10){
System.out.println("你输入的月份是淡季!");
switch(cs) {
case 1:
double tdc02=yj*0.7;
System.out.println("头等舱的价格为:"+tdc02);
break;
case 2:
double jjc02=yj*0.65;
System.out.println("经济舱的价格为:"+jjc02);
break;
}
}else{
System.out.println("你输入的月份有误!");
}
} }
Day03:运算符和表达式 / 分支结构的更多相关文章
- day03运算符、表达式、自增自减、三目运算符、程序结构、用户输入
复习 1.java的输出语句 1)System.out.println(); 2)System.out.print(); 2.注释 1)单行注释 // 2)多行注释 /* .... */ 3.变量 1 ...
- c语言基础表达式, 关系运算符, 逻辑运算符, 位运算符, 数据的取值范围, 分支结构(if...else, switch...case)
1.表达式: 表达式的判断是有无结果(值), 最简单的表达式是一个常量或变量, 如:12, a, 3 + 1, a + b, a + 5 都是表达式 2.BOOL(布尔)数据类型: c语言中除了基本数 ...
- day03 Java_运算符_分支结构
列表: 运算符的练习:算术.关系.逻辑.赋值.字符串连接.条件 分支结构的练习:if结构 分支结构的练习:if...else结构 参考 运算符的练习:算术 输出几个整数取模,验证结果 声明两个整型变量 ...
- 十一、 BOOL类型、分支结构和关系运算符
BOOL类型:表示非真即假.只有两个值:YES和NO,而二进制只识别二进制数,所以,将YES替换为“1”,NO替换为“0” BOOL数据类型占一字节的空间内存 BOOL数据类型输出为:%lu:输入为: ...
- Javascript开发技巧(JS中的变量、运算符、分支结构、循环结构)
一.Js简介和入门 继续跟进JS开发的相关教程. <!-- [使用JS的三种方式] 1.HTML标签中内嵌JS(不提倡使用): 示例:<button onclick="javas ...
- JavaScript 基础——使用js的三种方式,js中的变量,js中的输出语句,js中的运算符;js中的分支结构
JavaScript 1.是什么:基于浏览器 基于(面向)对象 事件驱动 脚本语言 2.作用:表单验证,减轻服务器压力 添加野面动画效果 动态更改页面内容 Ajax网络请求 () 3.组成部分:ECM ...
- python 运算符与分支结构
运算符与分支结构 运算符 赋值运算符 用'='表示,左边只能是变量 算术运算符 +.-.*:加.减.乘 /:除法运算,结果是浮点型 //:除法运算,结果是整型 %:求余 **:求幂 复合运算符 +=. ...
- python_ 运算符与分支结构
# 运算符与分支结构 ### 运算符 - 赋值运算符 - 用'='表示,左边只能是变量. - 算术运算符 - +.-.*:加.减.乘 - /:除法运算,结果是浮点数 - //:除法运算,结果是整数 - ...
- java 基础 03 运算符 分支结构 循环结构
今天内容: (1)运算符 (2)分支结构 (3)循环结构 1运算符 1.1赋值运算符 (1)简单赋值 = 表示赋值运算符,用于将=右边的数据赋值给=左边的变量来覆盖原来的数值. 笔试题: ia == ...
随机推荐
- hive创建分区表
#创建分区表CREATE TABLE if not exists data_center.test_partition (id int,name string,age int)PARTITIONED ...
- DevExpress ASP.NET Bootstrap v19.1版本亮点:Scheduler控件
行业领先的.NET界面控件DevExpress 正式发布了v19.1版本,本文将以系列文章的方式为大家介绍DevExpress ASP.NET Bootstrap Controls中Rich Text ...
- grunt-contrib-watch 实时监测文件状态
grunt-contrib-watch:实时监测文件的增删改状态,状态改变时自动执行预定义任务使用watch时,被watch的文件可以分开写,这样可以提高watch的性能,不用每次把没修改的文件也执行 ...
- 面向对象之封装 及@property装饰器使用
目录 封装 1.封装的定义 2.封装的目的: 3.封装的三种方式 4.封装的优点 5.访问限制(封装) @property 装饰器 属性property底层实现 封装 1.封装的定义 将复杂的丑陋的, ...
- 【NOIP2017提高A组模拟10.7】Adore
题目 小w 偶然间见到了一个DAG. 这个DAG 有m 层,第一层只有一个源点,最后一层只有一个汇点,剩下的每一层都有k 个节点. 现在小w 每次可以取反第i(1 < i < n - 1) ...
- C# 4.0
序言 动态绑定-dynamic class Program { static void Main(string[] args) { ; ; // Rest the mouse pointer over ...
- 获取URL值带参数跳转
//要跳转界面 api.openWin({ name: 'PayOrder', url: 'PayOrder.html?id=2', pageParam:{name:pr} }); //跳转后的界面 ...
- centos 6.8安装mysql5.6
安装mysql 官方文档 A Quick Guide to Using the MySQL Yum Repository 下载 Yum Repository Go to the Download My ...
- F - Almost Sorted Array
F - Almost Sorted Array We are all familiar with sorting algorithms: quick sort, merge sort, heap ...
- Apicloud_(项目)网上书城01_前端搭建
[本文皆在记录自己开发Apicloud项目过程,不具备教学水平性文章] 参考书籍<30天App开发从0到1> Apicloud_(项目)网上书城01_前端页面开发 传送门 Apicloud ...