Java SE 控制语句
目录
流程控制语句:
-
顺序结构: 默认顺序从上到下,从左到右
-
选择结构: 根据条件决定是否执行一段语
- if…
- switch
-
循环结构: 控制一段代码执行多次 (执行的次数可以有条件控制)
- for
- while
- do…while
1、选择语句
1.1 if 语句
- 单选|单分支:
if(选择判断){
执行的语句体;
}
满足()条件就执行语句体,不满足就不执行
选择判断 : 是一个结果为boolean类型的表达式 true满足|false不满足
- 双选|双分支:
if(选择判断){
满足条件执行的语句体1;
}else{
不满足条件执行的语句体2;
}
根据条件的结果,决定执行那种语句体
如果结果为true,执行语句体1,结果为false执行语句体2
- 多选|多分支:
if(条件1){
满足条件执行的语句体1;
} else if(条件2){
不满足条件执行的语句体2;
} else if(条件3){
不满足条件执行的语句体3;
}
....
else{
以上条件都不满足就执行语句体n; --接盘侠,可以存在可以不存在
}
注意:
多选择的多个判断 从上到下一次进行,只要执行了一个对应的语句体,后面的语句体不会再次执行;。
一个if结构只能执行一个语句体。
如果语句体中的语句只有一条,前后的{}可以省略。
int i = 2;
if(i == 0) System.out.println("=0");
else if(i > 0) System.out.println(">0");
else System.out.println("<0");
String name ="admin";
if(name == "admin"){
System.out.println("管理员");
}else{
System.out.println("普通用户");
}
1.2、switch 语句
switch 定制判断
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
....
default:
语句体n;
break;
}
- 执行流程:
- 计算表达式,得到一个结果。
- 从上到下与每一个case后的值进行判断是否相等,相等执行对应的语句体,不相等继续向下判断。
- break;代表结束当前switch语句结构,没有break会发生case穿透。
- 如果所有的case都不满足,就执行default后面的语句体n,相当于else,可以不写
表达式: 一般为变量名,可以为表达式,可以为常量(没意义)
类型: byte,short,int,char,枚举(jdk1.5),字符串(jdk1.7)
-
case 穿透:
- 当执行完毕语句体之后如果没有break,发生case穿透,下面的case无论是否满足,都不会再判断,直接执行对应的语句体,知道遇到下一个break或者switch语句的结束而结束。
-
default: 位置可以任意改变
-
switch 与 if的区别:
- if: 区间判断,定值判断
- switch: 定值判断
- 能用switch都能用if,但是能用if不一定能用switch
public static void main(String [] args){
//根据年龄判定 ,决定年薪的值
int age = 23;
int sal;
switch(age){
case 18:
sal = 180000;
System.out.println("年薪的值为:"+sal);
break;
case 19:
sal = 190000;
System.out.println("年薪的值为:"+sal);
break;
case 20:
sal = 200000;
System.out.println("年薪的值为:"+sal);
break;
default:
System.out.println("年龄不符合要求!!!");
}
//递归
System.out.println(f(6));
}
public static int f(int n){
if(n == 1)
return 1;
else
return n+f(n - 1);
}
3、循环语句
循环: 让一些代码重复执行多次
思考: 是否存在一些代码想要重复执行多次,如果是可以使用java中的循环
- for 次数循环 : 明确循环次数
- while 条件循环 : 不明确循环次数,但是是否结束循环根据一个条件决定
- do…while
3.1 for 循环
for(条件初始化;条件判断;条件变化){
重复执行的循环体语句;
}
-
条件初始化: 声明一个变量 i,并且第一次赋值,这个变量i就是条件
-
条件判断: 针对变量i的值的判断,结果为boolean类型,结果决定下一次循环是否能够执行,true就是执行,false整个结束当前循环结构
-
条件变化(迭代因子): 变量i自身值的改变,最终要让条件i不满足条件判断,用来结束循环
-
执行流程:
- 1.条件初始化
- 2.条件判断,满足条件,执行循环体语句,不满足条件直接结束循环
- 3.条件变化
- 重复执行2,3步骤
注意: for循环的条件i是属于当前这个循环的,可以在循环的(),{}中使用循环体中语句只有一句,前后的{}可以省略。
// 使用for循环方式计算2+4+6+…+100的值
int sum=0;
for(int i=0;i<101;i+=2){
sum+=i;
}
System.out.println("sum="+sum);
// for循环输出1-1000之间能被5整除的数,并且每行输出3个
int count=0;
for(int i=1;i<=1000;i++){
if(i%5 ==0){
count++;
System.out.print(i+"\t");
if (count%3==0) System.out.println();
}
}
3.2 while 循环
条件初始化;
while(条件判断){
循环体语句;
条件变化;
}
注意:
- 在while循环中条件初始化不属于当前 while循环,注意变量作用域的问题
- for循环的条件i属于当前循环
- 循环体语句只有一句,前后的{}可以省略
/*
while(true){
System.out.println("死循环,哈哈哈!!!!");
}
*/
while(i<=10){
i++;
System.out.println(i);
}
System.out.println(i); //作用域属于当前main方法
/*
while(false){
System.out.println("不满足while循环");
}
*/
3.3 do…while 循环
do{
循环体;
}while(条件判断);
当{}中的语句体只有一句,前后的{}可以省略
区别 :
- while循环先判断后执行
- do…while 先执行后判断
- do…while的语句体无论是否满足条件判断,都至少会执行一次
do{
System.out.println(i);
i++;
}while(i<=100);
//变量i的作用域是当前main方法,不属于do..while循环
System.out.println("不满足条件的i="+i); //101
/*
while(false){
System.out.println("不满足while循环");
}
*/
do
System.out.println("不满足while循环");
while(false);
3.4 嵌套循环
- 循环中嵌套循环
- 实现功能,每一个for循环中存在一个变量条件i
- 外层循环变化一次,内层循环变化一轮
//外层循环 i 行
for(int i=1;i<=5;i++){
//内层循环控制列,执行完毕,代表这一行中的所有列执行完毕
for(int j=1;j<=5;j++){
System.out.print(i+"---->"+j+" ");
}
//换行
System.out.println();
}
for(int i=1;i<=5;i++){
//内层循环控制列,执行完毕,代表这一行中的所有列执行完毕
for(int j=1;j<=5;j++){
System.out.print("* ");
}
//换行
System.out.println();
}
4、break与continue
4.1 break
作用 : 结束 终止
应用场景: switch 循环
默认针对离break关键字最近的内层循环
4.2 continue
作用 : 结束本次循环,直接进入到下一次循环
应用场景 : 循环中使用
默认针对离continue关键字最近的内层循环
//查询1~10之间的数据,查到2个能被3整数的数结束
//重复做判断,查找->循环
//确定变量变化的范围 1~10 -> for
int count = 0; //计数器
for(int i=1;i<=10;i++){
if(i%3==0){
System.out.println(i);
count++;
if(count==2){
break;
}
}
}
//死循环一般配合break关键字使用,让死循环有停下来的时机
int j = 1;
while(true){
System.out.println(j);
if(j==5){
break;
}
j++;
}
System.out.println("死循环后面的代码");
//打印1~10之间的数据,遇到5跳过
for(int i=1;i<=10;i++){
if(i==5){
continue; //跳过本次,直接进入下一步,下面多少行语句体都不执行了
}
System.out.println(i);
}
4.3 标签break与continue
- 1)需要某一层循环开始的位置设置标签 ->标签名:
- 2)在使用break或者continue,执行针对跳出|结束哪一个标签代表的循环–>break 标签名; | continue 标签名;
public static void main(String[] args){
one://外套标签
for(int i=1;i<=5;i++){
two://内套标签
for(int j=100;j<=110;j++){
System.out.print(i+"--->"+j+" ");
if(j==105){
break one;
}
}
System.out.println();
}
}
5、练习
import java.util.Scanner;
public class Test01 {
public static void main(String[] args) {
// 1.键盘接收一个数字,判断这个数是否为质数(质数是只能被1跟自身整除的数,1不是质数)
Scanner sc = new Scanner(System.in);
System.out.println("输入一个数:");
int num=sc.nextInt();
int count =0;
for(int i=2;i<num;i++){
if (num%i==0){
count++;
}
}
if(count==0){
System.out.println(num+"是质数");
}else{
System.out.println(num+"不是质数");
}
System.out.println("输入一个数:");
int a=sc.nextInt();
for(int i=2;i<a;i++){
if (a%i==0){
System.out.println(a+"不是质数");
break;
}else if(i==a-1){
System.out.println(a+"是质数");
}
}
}
}
import java.util.Scanner;
public class Test02 {
public static void main(String [] args){
Scanner sc=new Scanner(System.in);
String name;
String password;
int count;
count=2;
for(;;){
System.out.println("用户名:");
name=sc.next();
System.out.println("密码:");
password=sc.next();
if(name.equals("admin") && password.equals("123456")){
System.out.println("登录成功");
break;
}else if(count ==0){
System.out.println("对不起,您3次均输入错误这个信息");
break;
}else{
System.out.println("密码错误!还有"+count+"次机会");
count--;
}
}
}
}