三元运算符
逻辑/关系表达式?表达式1:表达式2;
执行顺序:逻辑/关系表达式结果为true,那么执行表达式1,反之执行表达式2
表达式1和表达式2的运算结果要求类型相同或相容
double d = a > b ? a * 2 : b * 2.5;
a > b ? System.out.println(a):System.out.println(b); //这种方式不允许,因为没有运算结果
注意:三元运算符也是一个运算符,所以运算完成之后一定有运算结果
在使用过程汇总,如果涉及到了三元表达式的嵌套,每个子三元表达式都添加()以方便阅读和维护
int i = 3, j = 4;
System.out.println(i > j ? true : false); //从语法上而言,没问题
// i > j ? true : false -> i < j
流程控制
顺序结构
指程序从上到下从左到右依次运行
分支结构
判断结构
if(逻辑值){
代码块;
}
执行顺序:当逻辑值为true的时候,执行代码块;反之不执行
当if结构的代码块只有一句的时候,{}可以省略不写,但是最好写上
if(逻辑值){
Code 1;
} else {
Code 2;
}
执行顺序:当逻辑值为true的时候,执行代码块1; 反之执行代码块2
if(逻辑值1){
Code1;
} else if(逻辑值2){
Code2.;
} else if(逻辑值3){
Code3;
} else {
Code4;
}
执行顺序:先执行逻辑值1,如果逻辑值1为true,执行Code1;反之执行逻辑值2,如果逻辑值2为true,执行Code2,以此类推
练习:输入月份,输出季节。3-5春,6-8夏,9-11秋,12,1,2冬
从控制台输入数据
import java.util.Scanner; //导包语句
Scanner s = new Scanner(System.in); //输入流
int i = s.nextInt();
double d = s.nextDouble();
String s = s.nextLine();
char c = (char)s.nextInt();
选择结构
switch(表达式){
case 情况1:Code1;break;
case 情况2:Code2;break;
……
default:Code ; break;
}
表达式的运算结果只能是byte/short/int/char
从JDK1.7开始,允许表达式的结果是String
从JDK1.5开始,允许表达式的结果是枚举常量
break关键字表示当前选项的结束,在switch语句中,只有遇到了break语句或者执行switch语句的末尾才会结束
有break的时候,选项之间的顺序没有影响;只要有一个或者一个以上的选项没有break,那么这时候顺序会有影响
break表示当前一层选择语句的结束
int i = 1;
switch(i){
case 1: int j = 0;
case 2: j += 1;
case 3: j += 2;
case 4: j += 3;
default: j+= 4;
}
System.out.println(j); //编译错误,变量没有定义
判断的是一个范围的时候,建议使用if-else-if结构;如果情况相对比较固定的时候,建议使用switch-case语句
循环结构
while(逻辑值){
Code;
}
执行顺序:先判断逻辑值。如果逻辑值为true,执行Code,然后再次判断逻辑值,如果为true,继续循环;如果为false,循环结束
循环的三要素:定义循环变量;循环条件的控制;循环变量的改变
while语句中,如果代码块只有一句,{}也可以省略
do{
Code;
} while(逻辑值);
执行顺序:先执行Code,执行逻辑值,如果逻辑值为true,再次执行Code,如果逻辑值为false,结束循环
Code至少执行一次
for(循环变量的定义; 循环条件的判断;循环变量的改变){
Code ;
}
当循环变量的改变相对比较规律的时候,建议使用for循环
当不知道循环次数的时候,建议使用while循环。
while循环,循环变量定义在循环外,循环结束之后循环变量依然可以使用;for循环的循环变量是定义在for循环里边的,循环结束之后,循环变量不能继续使用
break和continue
break:用于选择或者循环语句中,表示结束当前一层语句
continue:用于循环语句中,表示跳出当前循环继续下次循环
这两个关键字必须结合相应的语句使用,单独存在没有意义,因此单独存在的时候编译报错
System.out.print();--废话,废话不允许存在--编译报错
int i = 5;
while(true){}
System.out.println(i);--这句话编译报错---因为永远执行不到
循环支持标号形式
当需要一次性跳出多层循环的时候,可以使用标号形式。但是不推荐。降低了程序的阅读性