Java流程控制语句

一、条件语句/分支语句

根据条件的判断,执行不同的代码

1. if ... else语句 语法:

if (boolean表达式){

        statement语句

}[ else if(boolean表达式){

        statement语句

}else if(boolean表达式){

        statement语句

}else{

        statement语句

} ]

 注意:

(1) 如果if控制语句中只有一条语句,大括号可以省略

例如:if(i == 1)

                System.out.println("升旗");

(2) if的后面不要有 ;

if(i==1); //由于有分号,if语句不会控制下面的语句

         System.out.println("升旗");

 2. switch 语句

switch(变量/值){

        case 值1 :

                语句1;

                break;

        case 值2 :

                语句2;

               break;

        ...

        default :

                语句

 解释: switch中的值依次和case 中的值 做==的比较,如果 相等,执行case中的语句,如果执行到break语句则结束 整个的switch语句;如果switch中的值和 case依次比较都不相等,那么执行default中的语句。 s

witch相当于是if ... else if ... else语句,但只能比较==的情况 效率高于if ... else,一般出现5条以上的if elseif 的判断,尽量用switch 注意事项

1. switch()中是int类型或自动向上转为int的类型,也可以是字符串类型,在JDK7才允许的

2. switch和case只能是==比较

3. case中如果不写break , 如果switch有一个case相等了,后面所有的case都自动相等,case中一定要写 break

 二、循环语句

当要执行多条相同或相似的语句时,通过循环语句来执行

1. while循环语句

语法:

while(boolean表达式){

        语句

}

解释: 执行到while语句时,boolean表达式结果是true,执行语句,再次执行while,如果是false,结束 while循环

//死循环

while(true){

         System.out.println("Hello World");

}

public static void main(String[] args) {
    //不是死循环
    byte i = 1;
    while(i>0){
        System.out.println(i);
        i++;
    }
}

 利用循环计算两个区数和的平均值

public static void main(String[] args) {
//计算两个区间的和的平均值
    Scanner scanner = new Scanner(System.in);
        System.out.println("请输入开始区间:");
    int start = scanner.nextInt(); //3
        System.out.println("请输入区间的结束:");
    int end = scanner.nextInt(); //7
    int initStart = start;
    if(start<=end){
        int sum = 0;
    while(start<=end){
        sum += start;
        start++;
    }
        System.out.println("区间"+initStart+"~"+end+"平均值是:"+sum/(end-initStart+1));
    }else{
        System.out.println("区间开始数不能大于结束数");
    }
}

2. do...while语句

语法:

do{

        语句

}while(boolean表达式);

解释: 先执行一次循环体,因为代码是顺序执行的,循环体是在while的上面,再判断while中是true还是false,如果是true再执行循环体,再判断;如果是false结束循环语句

do...while()无论如何都先执行一次循环体

 3. for循环语句

语法:

for(初始化表达式;boolean表达式;递增/递减表达式){

        语句

}

解释:三个表达式决定了循环 从几开始、到哪结束、循环几次

 for循环语句的执行顺序:

(1)初始化表达式 ,只执行1次

(2)boolean表达式,如果是true,执行循环体的代码;如果是false立刻结束循环

(3)循环体执行完毕后,执行递增/递减表达式,再执行boolean表达式判断

注意事项

(1)for循环死循环的写法

for( ; ; ) {

        System.out.println("Hello");

}

 (2)循环中可以套循环,也就是可以写二层循环、三层循环....

 (3)for循环中的i的作用范围,只在当前的for循环有效

for 循环的嵌套使用

public static void main(String[] args) {
    //发现了一个2位数字的密码箱,打印出所有的密码组合的情况
    //打印 00 01 02 03 04..09
    // 10 11 12 13 14..19
    //一层循环 是第一位数字的循环
    for(int i = 0;i<=9;i++){
        for(int j = 0;j<=9;j++){
            System.out.println(i+""+j);
        }
    }
}

用while能实现的循环用for也能实现,反之一样,通常情况确定了循环次数用for比较好不确定循环的次数,可以只知道一个结束循环的条件,用while比较好

 三、break和continue关键字

循环控制,编程时对循环的执行次数进行控制

1. 可以通过控制for循环中变量i的值,结束/继续循环

2. break和continue关键字控制循环

   (1) break : 当在循环中执行到了break语句,循环就会立刻结束。如果break是在一个二层循环中,结束的是当前的层的循环。

for(int i = 1;i<=10 ;i++){
    for(int j = 1;j<=10;j++){
        if(j==3){
            break;
        }
        System.out.println(i+","+j); //11 12
    }
}

为循环设置循环点,在break的后面可以 写一个循环点,结束循环点指定的循环。

a:for(int i = 1;i<=10 ;i++){
    b:for(int j = 1;j<=10;j++){
        if(j==3){
            break a;
        }
            System.out.println(i+","+j); //11 12
    }
}

 (2)continue: 当程序执行到continue时,立刻结束本次循环 。如果continue是在一个二层循环中,控制是当前的层的 循环。

continue的后面也可以接循环点。

for(int i = 1;i<=10 ;i++){
    for(int j = 1;j<=10;j++){
        if(j==3){
            continue;
        }
            System.out.println(i+","+j); //11 12 14 15 ... 21 22 24 ...
    }
}

continue的后面也可以接循环点。 

a:for(int i = 1;i<=10 ;i++){
    b:for(int j = 1;j<=10;j++){
        if(j==3){
            continue a;
        }
            System.out.println(i+","+j); //11 12 21 22 31 32
    }
}

四、return 关键字

return是返回的意思,在main方法执行了retrun语句,main方法立刻结束。

在return语句的下面,不能在执行其他的代码 循环的应用

1. 循环的优化

(1) 优化循环的次数

(2) 优化循环体代码的速度

//获得当前的时间戳
//时间戳代表了一个时间量,是从1970-01-01 00:00:00 距离当前时间的毫秒值,1秒=1000毫秒
long start = System.currentTimeMillis();
//1. 13389
//2. 160
    for(int a = 1;a<=2000;a++){
        for(int b = 1;b<=3300;b++){
            if(a*15+b*9+(10000-a-b)==30000){
                System.out.println("公鸡:"+a+",母鸡:"+b+",小鸡:"+(10000-a-b));
            }
        }
}
        long end = System.currentTimeMillis();
        System.out.println("用时:"+(end-start));

获得当前的时间戳
时间戳代表了一个时间量,是从1970-01-01 00:00:00 距离当前时间的毫秒值,1秒=1000毫秒

2. 图形题的写法

都是二层循环,一层循环负责换行,二层循环负责打每一行的内容

示例1:99乘法表

public static void main(String[] args){
    for(int i = 1;i<=9;i++){
        for(int j = 1;j<=i;j++){
            System.out.print(j+"*"+i+"="+i*j+"\t");
        }
            System.out.println();
    }
}

示例2:*打正三角形 5行的正三角

public static void main(String[] args){
    for(int i = 1;i<=5;i++){
        //打空格
        for(int j = 1;j<=5-i;j++){
            System.out.print(" ");
        }
        //打星
        for(int j = 1;j<=2*i-1;j++){
            System.out.print("*");
        }
            System.out.println();
    }
}

例3:空正三角形

public static void main(String[] args){
    for(int i = 1;i<=5;i++){
    //打空格
        for(int j = 1;j<=5-i;j++){
            System.out.print(" ");
        }
        //打星
    for(int j = 1;j<=2*i-1;j++){
        if(i == 1 || i == 5||j==1||j==2*i-1){
            System.out.print("*");
        }else{
            System.out.print(" ");
             }
        }
            System.out.println();
    }
}

例4: 输入年份和月份,输出多少天

public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);
    int year = scanner.nextInt();
    int month = scanner.nextInt();
    switch(month){
        case 4:
            System.out.println(30);
            break;
        case 6:
            System.out.println(30);
            break;
        case 9:
            System.out.println(30);
            break;
        case 11:
            System.out.println(30);
            break;
        case 2:
        if(year%4==0&&year%100!=0 || year%400==0)
            System.out.println(29);
        else
            System.out.println(28);
            break;
        default:
            System.out.println(31);
    }
}

例5:2. 判断输入的数是否是素数 思路:用这个数分别和2到这个数前一个数 做取余运算,能除开则不是素数

public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);
    int number = scanner.nextInt();
    //假定这个数是素数
    boolean flag = true;
    for(int i = 2;i<number/2;i++){
        if(number%i==0){
        flag = false;
        break;
    }
}
        if(flag){
            System.out.println("是素数");
        }else{
            System.out.println("不是素数");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aigo-2021

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值