在java中有三种流程控制结构:顺序结构、选择结构、循环结构
语法:
if(条件判断表达式){
执行语句
}
如果条件判断的表达式返回值是true则可以执行if内部的语句,否则如果是 false就不可以执行。条件表达式的结果一定是true或者false
/*
实现程序如果分数大于等于60就及格
if(条件判断表达式){
执行语句
}
如果if没有{}作为if体,if下面的第一行就是if体
* */
public static void main(String[] args) {
//定义一个变量存储分数
int score = 80;
if(score>=60){
System.out.println("及格");
}
System.out.println("程序结束!");
}
语法:
if(条件判断表达式){
执行语句
}else{
执行语句
}
/*
if(条件判断表达式){
执行语句
}else{
执行语句
}
* */
public static void main(String[] args) {
//定义一个变量存储分数
int score = 80;
if(score>=60){
System.out.println("及格");
}else {
System.out.println("不及格");
}
}
语法:
if(条件判断表达式){
执行语句
}else if(条件表达式1){
执行语句
}else if(条件表达式2){
...
}else{
}
注意:多重if当遇到第一个满足的表达式条件时执行当前的if语句,就不会再向下去执行
/*如果成绩大于等于90分且小于等于100分,输出A级,否则如果大于等于80 分,输出B级
否则如果大于等于70分,输出C级,否则如果大于等于60分,输出D级,
低于60分,输出E级
*/
public static void main(String[] args) {
int score = 85;
if(score>=90&&score<=100){
System.out.println("A级");
}else if(score>=80){
System.out.println("B级");
}else if(score>=70) {
System.out.println("C级");
}else if(score>=60) {
System.out.println("D级");
}else {
System.out.println("E级");
}
//输出结果:B级
}
在if控制语句中又包含一个或多个if控制语句。嵌套if可以通过外层语句和内层语句的协作来增加程序的灵活性。
语法格式:
if(表达式1){
if(表达式2){
语句
} else{
语句
}
}else if(表达式3){
语句
}else{
语句
}
/*
如果今天是周六或者周日,则外出。如果气温在30度以上,去游泳,否则去爬山。
如果今天不是周六或者周日,就要工作。如果天气好,去谈业务;否则在公司。
* */
public static void main(String[] args) {
/*分析:
外层if判断是否是周六或者周日,内层if判断天气
* */
int day = 6;//周六
int temp = 32;//温度32度
String weather = "天气好";//天气好
if(day == 6 || day == 7){
if(temp>=30){
System.out.println("游泳");
}else {
System.out.println("爬山");
}
}else {
if("天气好".equals(weather)){
System.out.println("谈业务");
}else {
System.out.println("在公司");
}
}
//打印结果:游泳
}
Switch:由上到下用switch中的表达式和值进行比较,如果匹配成功就执行case后的语句,在执行break的时跳出switch,如果一个也没有匹配上就执行default默认情况。
Switch(表达式){
case 常量1:
执行语句1;
break;
case 常量2:
执行语句2;
break;
...
default:
执行语句 ;
break;
}
break可以省略不会报错,如果省略就会穿透执行语句(不管是否能匹配上),直到遇到一个break才会跳出,所以我们不建议省略break。在jdk1.7之前,swtich的表达式只能是整型、字符型或枚举类型。但是jdk1.7后可以使用String。
如果与任何一个case后的常量值都不匹配,就执行default中的语句。
注意:Switch和多重if的区别:If可以做等值判断也可以做区间判断。Switch只能做等值判断,不能做区间判断
//1 --> 周一
//2-->周二
//3 --> 周三
//4-->周四
// 5 --> 周五
// 6、7-->周末
public static void main(String[] args) {
int day = 5;
switch(day){
case 1:
System.out.println("周一");
break;
case 2:
System.out.println("周二");
break;
case 3:
System.out.println("周三");
break;
case 4:
System.out.println("周四");
break;
case 5:
System.out.println("周五");
break;
case 6:
case 7:
System.out.println("周末");
break;
default:
System.out.println("数字不是1到7之间的整数!");
}
}
语法:逻辑表达式2?表达式1:表达式2
?前面的逻辑表达式如果运算的结果是true,整个表达式的结果就是表达式1?前面的逻辑表达式
如果运算的结果是false,整个表达式的结果就是表达式2
注意:三元运算符适合两个值的判断,适合来代替if else形式
public static void main(String[] args) {
//1-->男;其他-->女
int gender = 1;
// if(gender==1){
// System.out.println('男');
// }else {
// System.out.println('女');
// }
char res = gender==1?'男':'女';
System.out.println(res);
}
循环:就是重复发生的过程(循环一般有重复的前提条件)。
循环分类:while循环,do-while循环,
for循环:简化while语法,执行流程同while
增强for循环——针对数组和集合
语法:
while(表达式){
循环体
}
表达式结果如果是true那么就执行循环体,如果是false就结束循环
public static void main(String[] args) {
//1+2+3+···+100的求和计算
int i = 1;
int sum = 0;//定义变量存储总和
while (i<=100){
sum+=i;
i++;
}
System.out.println(sum);
}
当while(true){},即条件为true时,会出现死循环。
规避死循环/无限循环:每次循环,修改循环变量的值。
语法:
do{
循环体
}while(表达式);
先执行,后判断
注意:do…while和while,前者是先执行循环体,后者是先判断在执行循环体。
public static void main(String[] args) {
//1+2+3+···+100的求和计算
int i = 1;
int sum = 0;//定义变量存储总和
do {
sum+=i;
i++;
}while (i<=100);
System.out.println(sum);//5050
}
语法:
for(表达式1; 表达式2; 表达式3){
循环体
}
表达式1(变量初始化):计数器的初始化,它只初始化一次
表达式2(循环条件):循环条件的判断,多次执行
//1+2+3+···+100的求和计算
int sum = 0;//定义变量存储总和
for (int i =1;i<=100;i++){
sum+=i;
}
System.out.println(sum);//5050
多重循环(嵌套循环)
循环语句内可以再包含循环语句,不同的循环语句可以相互嵌套。
public static void main(String[] args) {
/*打印5行5列的*
*****
*****
*****
*****
*****
*/
for (int i=0;i<5;i++){
//外层打印5行
System.out.println();
for (int j=0;j<5;j++){
//打印一个*不换行
System.out.print("*");
}
}
}
使用跳转语句控制程序流程
break
break在循环中的作用是终止当前循环,在switch中是终止switch。
break用来跳出循环和switch
//输出数字1——10,若遇到4的倍数程序自动退出
for (int i = 1;i<=10;i++){
if(i%4==0){
break;
}
System.out.println(i);//1 2 3
}
continue(只能用在循环中)
也是来控制循环,在某次循环的时候放弃,后续的接着循环。
即本次循环后面的代码不执行,直接进入循环条件的位置,开启新一轮循环。
//输出数字1——10中非4的倍数的数字
for (int i = 1;i<=10;i++){
if(i%4==0){
continue;
}
System.out.println(i);//1 2 3 5 7 9 10
}
return
结束当前方法的执行并退出返回到调用该方法的语句处。
public static void main(String[] args) {
//输出数字1——10中4以下的数字
for (int i = 1;i<=10;i++){
if(i%4==0){
return;
}
System.out.println(i);
}
System.out.println("循环结束");
}
//打印结果:1 2 3
//当i=4时,执行return语句,结束当前循环,
// 也结束了整个方法的执行,所以没有打印“循环结束”