运算符和表达式
运算符:赋值运算符,算数运算符,关系运算符,逻辑运算符
单等号 =
计算顺序:从右往左
eg:
int num = 998; //将998这个数值赋值给整型变量num
复合运算符:+=,-=,*=……
eg:
int num = 90;
int num1 =80;
num = num +90; //自增90
num1 += 80; //自增80,与上式等价
System.out.println("num:" + num + "\n" +"num1:" + num1);
运行结果:
表达式:运算符与操作数的组合
eg:
a = (b + 1) + (b - 2)
算数运算符可以进行算数运算
几元表示需要几个操作数参与运算
一元运算符:++、–
int num1 = 5, num2 = 8;
num1++; //=>num = num+1 打印结果为5
int result1 = num1++; //重点+难点,区分前置还是后置 打印结果为5
/*上述式子运算顺序等价于下面
int result1 = num1;
num1++*/
int result2 = ++num2; //打印结果为9
/*上述式子运算顺序等价下面
++num2
result2 = num2
*/
个人总结:当++或–只出现在一个变量无其他运算符时前置后置无所谓,eg:
num++//等价于++num
当++或–出现上述情况时,前置++或–才能将++或–的值赋值给前面的变量,后置的话就是先赋值给前面的变量再进行++或–运算。
二元运算符:+、-、*、/、%(取模)
int num1 = 8979 / 10; //傻瓜计算机,不会给你四舍五入,直接去掉个位,变成897
double num2 = 6789 / 10; //运行结果:678.0
int num3 = 15 % 2; //运行结果:1,取模的意思是取余数
int num4 = 15 % 3; //运行结果:0
int num5 = -15 % -2; //运行结果:-1,取模最终结果符号只跟第一个数字符号一致,自己尝试
三元运算符:? :
跟if…else…差不多
看程序吧,自己换换数字尝试
int num1 = 90;
int num2 =80;
int num3 = num1 < num2 ? 90 :80;
System.out.println(num3); //打印结果:90
关系运算符:>、<、>=、<=、==、!=
关系运算符可以比较大小,高低,长短。
逻辑运算符&&、||、!
返回值为bool类型,不是true就是false
位运算符:&、|、~、^、<<、>>
条件结构
if结构
先判断后执行
if(条件为真){
//代码块1
}
else{
//代码块2
}
注意:
1、可以省略大括号
2、省略大括号后if结构只能影响到下一行
举例程序:
package feng.java.learning;
import java.util.Scanner;
/*
* 硬盘盘符一般采用A-Z大写字母表示
* 使用程序判断用户输入盘符是否符合规则
* */
public class ifDemo {
public static void main(String[] args) {
//1、输入盘符
Scanner input = new Scanner(System.in);
System.out.print("输入盘符");
char ch = input.next().charAt(0); //获取用户输入字符串的第一个字符
if(ch >= 'A' && ch <= 'Z'){
System.out.println("输入合法!");
}
else{
System.err.println("输入非法!!");
}
}
}
switch结构
switch(表达式){
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
case 常量3:
语句3;
break;
……
default:
语句:
}
使用switch结构时的注意点:
1.switch后的表达式可以是整型、字符型、String型(不建议String型)
2.case后常量表达式的值不能相同
3.case后允许多条语句,不需要大括号
4.如果不添加break语句,需要特别注意执行顺序
5.case和default子句的先后顺序可以自行变动
6.default子句可以省略
eg:
package feng.java.learning;
import java.util.Scanner;
/*
* 根据月份打印对应的天数
* 如果是闰年,2月份天数为29天
* 使用switch-case结构
* isLeapYear = year % 4 == o && year != 0 || year % 400 == 0
* */
public class 日历 {
public static void main(String[] args) {
//1、定义变量:年、月、日
int year = -1,month = -1,dayOfMonth = -1;
Scanner input = new Scanner(System.in);
System.out.print("年份:");
year = input.nextInt();
System.out.print("月份:");
month = input.nextInt();
//2、根据月份计算当月的天数,2月默认28天
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
dayOfMonth = 31;
case 4:
case 6:
case 9:
case 11:
dayOfMonth = 30;
case 2:
dayOfMonth = 28;
}
//3、如果输入年份是闰年,月份天数+1
boolean isLeapYear = year % 4 == 0 && year != 0 || year % 400 == 0;
if(isLeapYear){
dayOfMonth ++;
}
System.out.println(year + "年" + month + "月有" + dayOfMonth + "天!");
}
}
小结:switch和多重if对比:
相同点: 都是用来处理多分支条件的结构
不同点: switch:等值条件判断——条件是有限个的时候
多重if:判断某个连续区间时的情况