1.一个例子
-10.5 % 3 =
public class BitOperator {
public static void main(String[] args) {
//若a为小数 则需要在中间加入强转 a - (int)a / b * b
//-10.5 - (-10) / 3 * 3
//-10.5 - (-3) * 3
//-10.5 - (-9)
// = -1.5
System.out.println(-10.5 % 3);
}
}
2.顺序控制
程序从上到下的逐行执行,中间没有任何判断和跳转
注意:Java中定义变量时采用合法的前向引用
3.分支控制if-else
单分支
基本语法
if(条件表达式){
执行代码块;(可以有多条语句)
}
当条件表达式为true时,就会执行{}中的代码。如果为false,就不会执行。
如果{}中只有一条语句,可以不用写{},但建议写上{},更为清晰
import java.util.Scanner;
public class BitOperator {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入你的年龄:");
int age = myScanner.nextInt();
if(age >= 18) {
System.out.println("你已满刑事年龄,要对自己的行为负责");
}
}
}
双分支
基本语法
if(条件表达式){
执行代码块1;(可以有多条语句)
} else {
执行代码块2;(可以有多条语句)
}
public class If01 {
public static void main(String[] args) {
int n1 = 56;
int n2 = 34;
int sum = n1 + n2;
if((sum % 3 == 0) && (sum % 5 == 0)) {
System.out.println("能被3和5整除");
} else {
System.out.println("不能被3和5整除");
}
}
}
public class If01 {
public static void main(String[] args) {
int year = 2020;
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
System.out.println("该年份为闰年");
} else {
System.out.println("该年份不为闰年");
}
}
}
多分支
if(条件表达式1){
执行代码块1;
}
else if(条件表达式2){
执行代码块2;
}
......
else{
执行代码块n;
}
说明:
- 当条件表达式1成立时,执行代码块1
- 如果条件表达式1不成立,才去判断条件表达式2是否成立
- 如果条件表达式2成立,执行代码块2
- 以此类推,如果所有的表达式都不成立
- 则执行else的代码块
注意:只能有一个执行入口
特别说明:
- 多分支可以没有else,如果所有的条件表达式都不成立,则一个执行入口都没有
- 如果有else,如果所有的条件表达式都不成立,则默认执行else代码块
import java.util.Scanner;
public class If01 {
public static void main(String[] args) {
//输出一个人的信用分评价
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入你的行用分:");
int credit = myScanner.nextInt();
if (credit >= 0 && credit <= 100) {
if (credit == 100) {
System.out.println("信用极好");
} else if (80 < credit && credit <= 99) {
System.out.println("信用优秀");
} else if (60 <= credit && credit <= 80) {
System.out.println("信用一般");
} else if (credit < 60 && credit >= 0) {
System.out.println("信用不及格");
}
} else {
System.out.println("请输入在0-100的数:)");
}
}
}
注意:如果条件判断语句中为 =,将执行该操作,可能改变原条件判断的布尔值
嵌套分支
在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支,外面的分支结构称为外层分支
建议:不要超过3层嵌套(可读性不好)
import java.util.Scanner;
public class if02 {
public static void main(String[] args){
//参加歌手比赛
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入你的性别: ");
char gender = myScanner.next().charAt(0);
System.out.println("请输入你的成绩: ");
double score = myScanner.nextDouble();
if (score > 8.0) {
System.out.println("恭喜你成功晋级!");
if (gender == '男') {
System.out.println("你被分到下一阶段的男子组");
} else if (gender == '女') {
System.out.println("你被分到下一阶段的女子组");
} else {
System.out.println("请输入正确性别!");
}
} else {
System.out.println("很可惜,你被淘汰了!再接再励");
}
}
}
import java.util.Scanner;
public class if03 {
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
System.out.println("现在的月份是: ");
int month = myScanner.nextInt();
System.out.println("请输入你的年龄: ");
int age = myScanner.nextInt();
if (month >= 4 && month <= 10) {
if (age < 18) {
System.out.println("身份:儿童,你的票价为30");
} else if (age >= 18 && age <= 60) {
System.out.println("身份:成人,你的票价是60");
} else if (age > 60) {
System.out.println("身份:老人,你的票价是20");
}
} else {
if (age > 18 && age < 60) {
System.out.println("身份:成人,你的票价是40");
} else {
System.out.println("你的票价是20");
}
}
}
}
4.switch分支结构
switch(表达式) {
case 常量1:
语句块1;
break;
case 常量2:
语句块2;
break;
......
case 常量n:
语句块n;
break;
default:
default语句块;
break;
}
- switch关键字,表示switch分支
- 表达式对应一个值
- case 常量1:当表达式的值等于常量1,就执行语句块1
- break:表示退出switch
- 如果和case常量1匹配,如果不匹配就匹配case常量2,以此类推
- 如果一个都没匹配上,执行default
switch快速入门
import java.util.Scanner;//表示把java.util下的Scanner类导入
public class switch01 {
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入a-g的字符: ");
char weekday = myScanner.next().charAt(0);
//
switch (weekday) {
case 'a' :
System.out.println("星期一");
break;
case 'b' :
System.out.println("星期二");
break;
case 'c' :
System.out.println("星期三");
break;
case 'd' :
System.out.println("星期四");
break;
case 'e' :
System.out.println("星期五");
break;
case 'f' :
System.out.println("星期六");
break;
case 'g' :
System.out.println("星期日");
break;
default:
System.out.println("你输入的无匹配");
break;//default段,有无break都会退出程序
}
}
}
switch注意事项:
- switch表达式的数据类型与case对应的常量值类型必须相同,或者可以自动转成可以相互比较的类型,比如输入的是字符,而常量是int
- switch(表达式)中表达式的返回值必须是:byte,short,char,int,enum(枚举),String
- case子句中的值必须是常量,而不能是变量
- default子句是可选的,当没有匹配的case时,执行default
- break语句用来在执行完一个case分支后使程序跳出switch语句块,如果没有写break,程序会顺序执行到switch结尾,除非遇到break
相关练习:
import java.util.Scanner;
public class switch03 {
public static void main(String[] args){
//输入a-e输出对应的大写字母
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入 a - e 的字母: ");
char a = myScanner.next().charAt(0);
switch (a) {
case 'a' :
System.out.println('A');
break;
case 'b' :
System.out.println('B');
break;
case 'c' :
System.out.println('C');
break;
case 'd' :
System.out.println('D');
break;
case 'e' :
System.out.println('E');
break;
default:
System.out.println("other");
break;
}
}
}
import java.util.Scanner;
public class switch04 {
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
//要求:学生成绩大于60分的,输出合格,低于60分的,
//输出不合格。(输入的成绩不能大于100),提示 成绩/60
//思路
//1.可使用分支来完成,但要求用switch完成
//2.这里可以有个转换
//如果成绩在[60, 100], (int)(成绩/60) = 1
//如果成绩在[0, 60), (int)(成绩/60) = 0
System.out.println("请输入你的成绩: ");
int grade = myScanner.nextInt();
//使用if-else保证成绩在0-100
if (grade >= 0 && grade <= 100) {
switch ((int)(grade / 60)) {
case 1 :
System.out.println("合格");
break;
case 0 :
System.out.println("不合格");
break;
// default :
// System.out.println("不符合要求");
}
} else {
System.out.println("输入的成绩不在范围内");
}
}
}
import java.util.Scanner;
public class switch05 {
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
//输入月份,查询对应的季节
//思路
//1.查询使用switch结构 对应月份对应case
//2.可以使用穿透(开发中比较常用)
//代码实现
System.out.println("输入要查询的月份: ");
int month = myScanner.nextInt();
switch (month) {
case 3 :
case 4 :
case 5 :
System.out.println("春季");
break;
case 6 :
case 7 :
case 8 :
System.out.println("夏季");
break;
case 9 :
case 10 :
case 11 :
System.out.println("秋季");
break;
case 12 :
case 1 :
case 2 :
System.out.println("冬季");
break;
default :
System.out.println("输入的不在月份范围内!");
break;
}
}
}