Java学习的第八天(JavaSE基础04_Switch语句_循环)

一、嵌套if

思路:只有被嵌套的if语句是在另一个if语句条件满足的前提下才能去执行

package com.jichuyufa;
import java.util.*;
public class Demo_QianTaoIf {
    public static void main(String[] args) {
        //嵌套if
        //需求:假如一个保险箱设了两道密码,内外各一道
        //password1=123  password2=456;前提是第一道密码只有成功才能去打开第二道密码
        //自己输入的密码用键盘录入,两道密码全部正确打开才能取到钱
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入保险柜的密码:");
        int password1=sc.nextInt();
        if(password1==123){
            System.out.println("恭喜你,成功打开了第一道密码锁");
            System.out.println("请继续输入保险柜的密码:");
            int password2=sc.nextInt();
            if(password2==456){
                System.out.println("恭喜你,成功打开了保险柜,可以取钱了!!");
            }else {
                System.out.println("触发警报!!");
            }
        }else {
            System.out.println("触发警报!!");
        }
    }
}

二、Switch(选择结构)

switch (表达式/变量) {
     case 1:
        语句体1;
         break;
     case 2:
        语句体2;
         break;
          ...
    default:
        语句体n+1;
        break;
 }
package com.jichuyufa;
import java.util.*;
public class Demo_Switch {
    public static void main(String[] args) {
        //switch语句(选择结构)
        //需求:买东西,输入数字 0--"包子" 1--"邵阳米粉" 2--"螺蛳粉" 3--"小米粥" 4--"烧麦" 其他数字--"不吃早餐"
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入你的早餐编号,不准输入负数:");
        int a=sc.nextInt();
        switch (a){
            case 0:
                System.out.println("包子");
                break;
            case 1:
                System.out.println("邵阳米粉");
                break;
            case 2:
                System.out.println("螺蛳粉");
                break;
            case 3:
                System.out.println("小米粥");
                break;
            case 4:
                System.out.println("烧麦");
                break;
            default:
                System.out.println("不吃早餐");
        }
    }
}

总结: Switch需要注意的地方

* 1.每个case后面必须加break(中断),否则会出现"代码穿透"现象
        什么是代码穿透:如果case0没有加break,会输出case0和case1语句体的结果
* 2.default放在最后面,break可以省略,因为它后面已经是switch的}(代表已经结束)
* 3.default没有放在最后面,一定要加上break
* 4.变量的类型可以是byte,short,int,char类型,而在jdk1.7版本中加入了String,不能是long,float,double
* 5(了解)switch和多重if语句的区别
*       多重if一般用于区间的判断,而switch语句用于单个变量--对应的单个值的判断
* 6.switch语句什么时候结束
*   1.碰到break
*   2.碰到}(代表已经结束)

三、循环

理解循环的三要素:
1.循环变量的初始化;2.循环变量的改变;3.循环条件的判断

1.while循环

1.1 while循环的格式
1.循环变量的初始化
2.while(循环的条件判断){
    //循环体---循环要做的事情
    3.循环变量的改变  //作用:避免死循环
}
package com.jichuyufa;

public class Demo_While {
    public static void main(String[] args) {
        //跑圈
        //1.循环变量的初始化
        int count=0;
        //2.循环条件的判断
        while(count<10){
            //3.循环体
            System.out.println("跑第"+(count+1)+"圈");
            //4.循环变量的改变
            count++;
        }
        System.out.println("跑完了");
    }
}
1.2 打印1--100之间所有的偶数
//打印1--100之间所有的偶数
        int a=0;
        while(a<=100){
            //判断a是否为偶数  4/2--余数为0   4%2==0
            //在这里如果不进行判断,那么就脱离我们的初衷了,必须每个数字都判断完
            if(a%2==0){
                System.out.println("偶数是:"+a);
            }
            a++;
        }
1.3 while循环的执行流程
    1.循环变量的初始化
    2.判断条件
    3.循环体
    4.条件的改变
    5.执行完之后又回到条件判断
    6.循环体
    7.条件的改变
    8.执行完之后又回到条件判断
    9.如果条件不满足就结束整个while循环
    10.结束

while循环的循环变量在循环结束之后还可以接着使用

2.do..while循环

2.1 do..while循环的格式(了解,用的很少)
1.循环变量的初始化
do{
    //循环体
    2.循环变量的改变
}while(循环条件的判断);  //注意:这里的逗号千万要记得加上
package com.jichuyufa;

public class Demo_DoWhile {
    public static void main(String[] args) {
        //循环变量的初始化
        int i=1;
        do{
            //循环体
            System.out.println("helloworld\t"+i);
            //循环变量的改变
            i++;
            //循环条件的判断
        }while(i<=10);  //必须以;结尾
        System.out.println(i);   //12
    }
}

细节:
1.do..while是先执行再判断的循环
2.do..while循环不管初始化如何,循环体至少要执行一次

结论:do..while循环的循环变量在循环结束之后还可以使用

2.2do..while循环的执行流程
1.循环变量的初始化
2.循环体
3.循环变量的改变
4.循环条件的判断
5.满足条件之后返回循环体
6.循环变量的改变
...

3.for循环

3.1 for循环的格式
for(循环变量的初始化;循环条件的判断;循环变量的改变){
    //循环体
}
package com.jichuyufa;

public class Demo_For {
    public static void main(String[] args) {
        for(int i=1;i<=10;i++){
            System.out.println("helloworld\t"+i);
        }
        System.out.println();
        for(int i=1;i<=10;i++){    //i在上次循环结束后被销毁了,这里是重新开辟一个内存空间可以接着用变量i
            System.out.println("helloworld\t"+i);
        }
    }
}

结论:
1.for循环的循环变量是在循环结束之后,会被垃圾回收器自动回收(可以减少内存的损耗,提高程序的效率),所以在循环外面找不到循环变量;

2.如果想在循环结束之后硬是要使用循环变量,可以把循环变量定义在循环外面,如下所示:

int i;
for(i=1;i<=10;i++){
    //循环体
}
System.out.println(i);  //i=11
3.2 for循环的执行流程
1.循环变量的初始化
2.循环条件的判断
3.循环体
4.循环变量的改变
5.循环条件的判断
6.循环体
7.循环变量的改变
...

四、三种循环的总结(区别)

1.while和for循环是先判断循环条件是否满足,再执行循环体,而do..while
循环是先执行一次循环体,然后再进行循环条件的判断

2.while和do..while循环的循环变量是在循环结束之后还可以继续使用,而
for循环的循环变量在循环结束之后会被垃圾回收器自动清除,出了for循环
循环变量就找不到了,这样做的目的是为了减少内存的损耗,提高程序的效率

五、跳转控制语句(两个关键字用来控制循环)

break(中断,退出):跳出整个循环,结束整个循环
continue:跳出本次循环,继续下次循环

六、嵌套循环

package com.jichuyufa;
/*输出如下图案:
    *
    ***
    *****
    *******
    *********
    ***********
    *************
    ***************
    *****************
*/
public class Demo_ForInFor {
//
    public static void main(String[] args) {
        for(int i=1;i<=9;i++){
            for(int j=1;j<=i*2-1;j++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

注意:外循环执行一次,内循环全部执行完

七、累加思想(1--100的和)

int sum=0
for(int i=1;i<=100;i++){
    sum=sum+i;
    //新的苹果的总是=旧的苹果的总数+增量
}
System.out.println(sum);
int sum=0//初始化sum=0
当i=1  sum=0(前一个sum的值0)+1 (增量)      //1
当i=2  sum=1(i=1时sum的总和1)+2(增量)      //3
当i=3  sum=3(i=2时sum的总和3)+3(增量)      //6
当i=4  sum=6(i=3时sum的总和6)+4(增量)   //10
当i=5  sum=10(i=4时sum的总和10)+5(增量)    //15
...
当i=99  sum=(98次之和)+99   
当i=100  sum=(99次之和)+100  

八、课后作业练习

package com.homework;
/*1.现在有一个银行保险柜,有两道密码。
想拿到里面的钱必须两次输入的密码都要正确。
如果第一道密码都不正确,那直接把你拦在外面;
如果第一道密码输入正确,才能有权输入第二道密码。
只有当第二道密码也输入正确,才能拿到钱!
(两道密码自己设)(嵌套if)*/
import java.util.*;
public class Hw1 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入密码:");
        int password1=sc.nextInt();
        if(password1==123){
            System.out.println("恭喜你,打开了第一道密码");
            System.out.println("请继续输入密码:");
            int password2=sc.nextInt();
            if(password2==456) {
                System.out.println("恭喜你,可以取钱了!");
            }else {
                System.out.println("对不起,请重新输入..");
            }
        }else {
            System.out.println("对不起,请重新输入..");
        }
    }
}
//运行结果:
请输入密码:
123
恭喜你,打开了第一道密码
请继续输入密码:
456
恭喜你,可以取钱了!
package com.homework;
/*2.分析以下需求,并用代码实现:(用switch实现)
    1.功能描述:键盘录入月份,输出对应的季节
    2.要求:
        (1)键盘录入一个整数(代表月份,范围1-12)
        (2)输出该月份对应的季节
            3,4,5春季
            6,7,8夏季
            9,10,11秋季
            12,1,2冬季
        (3)演示格式如下:
            请输入一个月份:3
            控制台输出:3月份是春季*/
import java.util.*;
public class Hw2 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入月份(必须使用数字)");
        int num=sc.nextInt();
        switch (num){
            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;
        }
    }
}
//运行结果:
请输入月份(必须使用数字)
1
冬季
package com.homework;
/*3、循环输出1到100之间的所有偶数*/
public class Hw3 {
    public static void main(String[] args) {
        for(int i=1;i<=100;i++){
            if(i%2==0){
                System.out.println(i);
            }
        }
    }
}
package com.homework;
/*4.输出1900-2012的所有闰年
提示:定义一个int类型变量 year
year%4==0&&year%100!=0||year%400==0 时,year是闰年*/
public class Hw4 {
    public static void main(String[] args) {
        for(int year=1900;year<=2012;year++){
            if((year%4==0&&year%100!=0)||year%400==0){
                System.out.println(year+"是闰年");
            }
        }
    }
}
//运行结果:
1904是闰年
1908是闰年
1912是闰年
1916是闰年
1920是闰年
1924是闰年
1928是闰年
1932是闰年
1936是闰年
1940是闰年
1944是闰年
1948是闰年
1952是闰年
1956是闰年
1960是闰年
1964是闰年
1968是闰年
1972是闰年
1976是闰年
1980是闰年
1984是闰年
1988是闰年
1992是闰年
1996是闰年
2000是闰年
2004是闰年
2008是闰年
2012是闰年
package com.homework;
/*5.输出10000-99999里面的所有回文数。
说明:即12321是回文数,个位与万位相同,
并且十位与千位相同。*/
public class Hw5 {
    public static void main(String[] args) {
        for(int i=10000;i<=99999;i++){
            int ge=i/1%10;
            int shi=i/10%10;
            int bai=i/100%10;
            int qian=i/1000%10;
            int wan=i/10000%10;
            if(ge==wan&&shi==qian){
                System.out.println("回文数:"+i);
            }
        }
    }
}
package com.homework;
/*6,打印100至999的水仙花数和个数
(水仙花数是一个三位数,各位数字的立方和等于该数本身);
例如:153=1*1*1+5*5*5+3*3*3是一个水仙花数*/
public class Hw6 {
    public static void main(String[] args) {
        for(int i=100;i<=999;i++){
            int ge=i/1%10;
            int shi=i/10%10;
            int bai=i/100%10;
            if(ge*ge*ge+shi*shi*shi+bai*bai*bai==i){
                System.out.println("水仙花数:"+i);
            }
        }
    }
}
//运行结果:
水仙花数:153
水仙花数:370
水仙花数:371
水仙花数:407
package com.homework;
/*7,求1---100的偶数的和?
    a%2==0偶数*/
public class Hw7 {
    public static void main(String[] args) {
        int sum=0;
        for(int i=1;i<=100;i++){
            if(i%2==0){
                sum=sum+i;
            }
        }
        System.out.println(sum);
    }
}
//运行结果:
2550
package com.homework;
/*8.计算1+1/2+1/3+1/4+1/5+1/6+1/7+1/8+1/9+1/10=?
   提示: 分子永远是1,分母是1--10*/
public class Hw8 {
    public static void main(String[] args) {
        float sum=0;
        for(int i=1;i<=10;i++){
            sum=sum+(float) (1.0/i);
        }
        System.out.println(sum);
    }
}
//运行结果:
2.9289684
package com.homework;
/*9.循环键盘录入5个学生的成绩,将这5个学生的成绩累加,最后输出结果。*/
import java.util.*;
public class Hw9 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int sum=0;
        for(int i=1;i<=5;i++){
            System.out.println("请输入第"+i+"个学生的成绩");
            int score=sc.nextInt();
            sum=sum+score;
        }
        System.out.println("5个学生的成绩总和:"+sum);
    }
}
//运行结果:
请输入第1个学生的成绩
1
请输入第2个学生的成绩
2
请输入第3个学生的成绩
3
请输入第4个学生的成绩
4
请输入第5个学生的成绩
5
5个学生的成绩总和:15
package com.homework;
/*10.2006年培养学员8万人,每年增长25%,请问按此增长速度,到哪一年培训学员人数将达到20万人?*/
public class Hw10 {
    public static void main(String[] args) {
        double person=8;
        int i=0;  //i用于统计年数
        while(person<=20){
            i++;
            person = person * (1 + (1.0 / 4));
        }
        System.out.println("第"+i+"年人数达到20万人");
    }
}
//运行结果:
第2011年人数达到20万人
package com.homework;
/*
11.计算2000年的1月1到2008年的1月1日之间相隔有多少天。
(提示年有365天,润年有366天,循环从2000年到2008年结束)*/
public class Hw11 {
    public static void main(String[] args) {
        int i=0;
        int j=0;
        for(int year=2000;year<2008;year++){
            if((year%4==0&&year%100!=0)||year%400==0){
                i++;
            }else {
                j++;
            }
        }
        int days=i*366+j*365;
        System.out.println(days);
    }
}
//运行结果:
2922
package com.homework;
/*12.计算2008年的1月1日,到2008年的9月1日相隔有多少天。
(提示:如果是润年的2月就有29天,平年的2月有28天。1、3、5、7、8*/
public class Hw12 {
    public static void main(String[] args) {
        int year=2008;
        int days=0;
        if((year%4==0&&year%100!=0)||year%400==0){
            for (int month=1;month<9;month++){
                switch (month){
                    case 1:
                    case 3:
                    case 5:
                    case 7:
                    case 8:
                        days=days+31;
                        break;
                    case 2:
                        days=days+29;
                        break;
                    case 4:
                    case 6:
                        days=days+30;
                        break;
                }
            }
        }else {
            for (int month=1;month<9;month++){
                switch (month){
                    case 1:
                    case 3:
                    case 5:
                    case 7:
                    case 8:
                        days=days+31;
                        break;
                    case 2:
                        days=days+28;
                        break;
                    case 4:
                    case 6:
                        days=days+30;
                        break;
                }
            }
        }
        System.out.println(days);
    }
}
//这个程序可以继续优化
//运行结果:
244

你可能感兴趣的:(Java学习的第八天(JavaSE基础04_Switch语句_循环))