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 == ...
随机推荐
- MYSQL数据库事务4种隔离级别及7种传播行为
事务的特性: 原子性:事务的不可分割,组成事务的各个逻辑单元不可分割. 一致性:事务执行的前后,数据完整性保持一致. 隔离性:事务执行不应该受到其他事务的干扰. 持久性:事务一旦结束,数据就持久化到数 ...
- LightOJ-1104-birthday Paradox(概率)
链接: https://vjudge.net/problem/LightOJ-1104 题意: Sometimes some mathematical results are hard to beli ...
- 【leetcode】801. Minimum Swaps To Make Sequences Increasing
题目如下: We have two integer sequences A and B of the same non-zero length. We are allowed to swap elem ...
- Python网络爬虫_爬取Ajax动态加载和翻页时url不变的网页
1 . 什么是 AJAX ? AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新 ...
- 通过喝水清晰简单了解I/O五大模型
一般单次I/O请求会分为两个阶段,每个阶段对于I/O的处理方式是不同的 I/O会经历一个等待资源的阶段 阻塞,指的是在数据不可用时,I/O请求会一直阻塞,直到数据返回 数据不可用时,立即返回,直到被通 ...
- github上创建项目
1.github登陆之后,创建仓库 2.填写项目基本信息 3.就这么简单创建好啦 4.此时点击这里就可以克隆地址了
- 1、布局容器Grid、StackPanel、GroupBox、DockPanel、WrapPanel
Grid——网格布局,其中控件或容器需指定位置 StackPanel——堆叠面板,其中的控件水平布局.竖直布局 DockPanel——停靠面板,内部控件或容器可以放置在上.下.左.右 WrapPane ...
- python 正则表达式实例
字符匹配 实例 描述 python 匹配 "python". 字符类 实例 描述 [Pp]ython 匹配 "Python" 或 "python&qu ...
- Codeforces Round #303 (Div. 2) D. Queue 水题贪心
题目: 题意:给你n个数值,要求排列这个序列使得第k个数值的前K-1个数的和>=第k个数值的个数尽可能多: #include <iostream> #include <cstd ...
- luoguP1772 [ZJOI2006]物流运输 x
P1772 [ZJOI2006]物流运输 题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线 ...