java SE教程04

三种程序结构 – 重点

  1. 顺序执行结构

    • 执行完毕上一行代码, 执行当前行代码 (逐行执行)
  2. 判断分支结构

    • 根据判断结果, 分为两种情况, 分别执行不同区域的代码
  3. 循环结构

    • 再某些特定的情况下 ,一个代码块 循环的执行 !

任何程序的逻辑, 都可以通过这三种程序结构, 来搭配实现 !
判断分支 if结构 – 重点

在进行if语句的编写时, 如果判断的代码块中只有一行代码, 可以省略大括号
格式1:

if(boolean表达式){
//判断代码块
}

与顺序执行结构 有点区别: 判断代码块中的代码, 只有当关系表达式的结果为true时 , 才会执行 !

练习:

  1. 接收用户输入一个int值, 判断是否大于1000 , 如果大于则打印

:您输入的值过大

  1. 观察如下代码, 通过补充代码, 完成注释中的需求:

import java.util.Scanner;
public class Demo2{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print(“请输入第1个数:”);
int a = input.nextInt();
System.out.print(“请输入第2个数:”);
int b = input.nextInt();
System.out.print(“请输入第3个数:”);
int c = input.nextInt();
System.out.print(“请输入第4个数:”);
int d = input.nextInt();
//通过分支结构 ,找到最大的那个数字, 并输出打印:

    int max1 = b;
    if(a>b){
        max1 = a;
    }

    int max2 = d;
    if(c>d){
        max2 = c;
    }

    int max = max2;
    if(max1>max2){
        max = max1;
    }

    System.out.println("最大值为:"+max);

}

}
格式2:

if(boolean表达式){
当表达式结果为true时 , 执行这里的代码
}else{
当表达式的结果位false时 ,执行这里的代码
}

案例:

import java.util.*;
public class Demo3{
    public static void main(String[] args){
        //用户输入两个数字, 我将最大的数字输出
        Scanner input = new Scanner(System.in);
        System.out.print("请输入两个数字,使用空格隔开:");
        int a = input.nextInt();
        int b = input.nextInt();

        if(a>=b){   
            System.out.println("您输入的两个数字中, 最大的是:"+a);
        }else{
            System.out.println("您输入的两个数字中, 最大的是:"+b);
        }


    }
}

格式3:

if(boolean表达式1){
    如果boolean表达式1的结果为true , 则这里代码执行
}else if(boolean表达式2){
    如果boolean表达式1的结果为false,且boolean表达式2的结果为true , 则这里代码执行

...

}else if(booolean表达式n){
    上述所有表达式 , 只有n的结果为true时 , 则这里代码执行
}

格式4.
if(boolean表达式1){
如果boolean表达式1的结果为true , 则这里代码执行
}else if(boolean表达式2){
如果boolean表达式1的结果为false,且boolean表达式2的结果为true , 则这里代码执行

}else if(booolean表达式n){
    上述所有表达式 , 只有n的结果为true时 , 则这里代码执行
}else{
    上述所有表达式 , 结果都为false时 , 则这里代码执行
}

练习:

设计一款程序, 

需求: 

提示用户输入学生的考试程序, 我们帮他判断学生成绩的等级 : 

用户输入的内容 是整型的数字: 0-100;
成绩==100 :    等级为 完美
成绩>=90分:   等级为 优秀
成绩>=70分:     等级为  良
成绩>=60分:  等级为  及格
成绩>=0 :   等级为不及格
其他成绩:  提示输入错误 !

练习:

出租车计费方式:由里程钱数和等候时间钱数相加得出。
里程数前3公里10元,超过3公里到15公里部分每公里2元,15公里以上部分每公里3元。
等候时间每2分半1元,不足部分不要钱。
输入公里数和等候秒数,输出车费。
比如: 16公里,等候290秒,车费 = 10 + (15-3)*2 + (16-15)*3 + 1 = 38 


-   提示用户输入里程 与 等待时长, 计算价格: 


import java.util.Scanner;
public class Demo5{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.print("请输入公里数:");
        int km = input.nextInt();
        System.out.print("请输入等候时长:");
        int s = input.nextInt();
        //计算等待时长需要的钱
        int money = s/150;
        if(km>15){
            money = money+(km-15)*3+(15-3)*2+10;
        }else if(km>3){
            money = money+(km-3)*2+10;
        }else{
            money+=10;
        }
    System.out.println("本次出租车的付款金额为:"+money+"¥");

    }
}

判断分支结构 选择 switch-case – 熟练掌握

语法结构:

switch(表达式){

    case 值1: 
    //表达式的结果与当前值1相同则执行这里的代码
        break;

    case 值2: 
    //表达式的结果与当前值2相同则执行这里的代码
        break;

    ....

    case 值n: 
    //表达式的结果与当前值n相同则执行这里的代码
        break;

    default:    
    //表达式的结果与上面的所有值都不同, 则执行这里的代码
        break;
}

//xxx
注意:  default 块可以省略不写 !

例如:
int a = 10;
switch(a){
case 100:
System.out.println(“第一个选项”);
case 10:
System.out.println(“第二个选项”);
break;
case 11:
System.out.println(“第三个选项”);
}

System.out.println("结束");

表达式的结果类型 :

int
byte
char
short

再jdk7.0 switch 支持了字符串类型的表达式
练习

1.  董飞去参加  比浪大会 ~ 

    如果董飞获得第一名, 将出任浪林盟主 !

    如果董飞获得第二名, 将出任浪林副盟主 ! 

    如果董飞获得第三名,  将退出浪林界, 嫁给旭东 ~ 

    获得其他名次, 则重新修炼, 等待东山再浪 ~  

    import java.util.*;
    public class Demo7{
        public static void main(String[] args){
            Random r = new Random();

            //随机产生董飞的名次
            int a = r.nextInt(3)+1;
            System.out.println("随机结果为:"+a);
            switch(a){
                case 1: 
                    System.out.println("恭喜董飞获得第一名, 出任浪林盟主");
                    //break;
                case 2: 
                    System.out.println("恭喜董飞获得第二名, 出任浪林副盟主");
                    //break;
                case 3: 
                    System.out.println("很遗憾 , 董飞获得了第三名, 决定退出浪林界, 嫁给旭东");
                    //break;

                default: 
                    System.out.println("董飞因为气球买多了, 肾有点不好, 耽误了行程,没有参加比浪大会");
                    //break;
            }


        }   
    }



2.  提示用户输入1-12月份, 我们帮用户判断对应的季节并输出到控制台 !


import java.util.Scanner;
public class Demo8{
    public static void main(String[] args){
    Scanner input = new Scanner(System.in);
    System.out.println("请输入一个月份(1-12) , 我来计算季节: ");

    int m = input.nextInt();

    switch(m){
        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;

        default:
            System.out.println("是不是傻");
            break;

    }

}


}

练习:

模拟命令解析器(菜单)

使用switch-case结构实现
输入1打印显示所有用户,
输入2显示增加新用户,
输入3显示修改用户信息,
输入4显示删除用户,
输入5显示退出。

import java.util.Scanner;
public class Demo9{
public static void main(String[] args){
System.out.println(“———员工管理系统———”);
System.out.println(“———请操作: ———”);
Scanner input = new Scanner(System.in);
int type = input.nextInt();

    switch(type){
        case 1: 
            System.out.println("---------显示所有用户------");
            break;
        case 2: 
            System.out.println("---------增加新用户  ------");
            break;
        case 3: 
            System.out.println("---------修改用户信息------");
            break;
        case 4: 
            System.out.println("---------4. 删除用户---------");
            break;
        case 5: 
            System.out.println("---------5. 退出---------");
            break;
    }

    System.out.println("程序执行结束");

}

}
循环结构
生活中带有重复元素的事情:

使用循环的步骤:

1.  分析一个业务中 具备的   [循环元素 ]

2.  分析这个循环元素中的 循环条件  和 循环的操作

3.  套用循环的代码 (可以是while循环, 可以是for循环)

4.  检查循环是否能够退出 ! (除非遇到特殊的需求, 一般情况下尽量避免死循环的操作)

面试题:

while循环与do while循环的区别:

特点:
while循环: 先判断 , 再执行
do while 循环: 先执行 , 再判断

区别:
区别只在于 如果循环条件最初就不满足时 ,
while循环不会执行循环代码块,
而do while循环 会执行一次循环代码块
三种循环

  1. while循环

    语法格式:

    while(1.boolean表达式){
    //2.循环代码块
    //当boolean类型表达式为true时 , 执行这里的代码
    }

    执行流程:

    jvm遇到while时 , 首先执行: 
    
    1.  判断boolean表达式结果是否为true
    2.  如果为true则执行循环代码块 ,否则跳过循环代码块!
    
    然后重复执行第一步, 第二步 , 直到boolean类型表达式结果为false , 则循环结束 ,跳过循环代码块 !
    

    练习:

    向控制台输出数字: 1.2.3.4.5.6…100

    boolean flag = true;
    int count = 1;
    while(flag){
    if(count==100){
    flag = false;
    }
    System.out.println(count++);
    }

  2. do while循环

语法结构:

do{
//循环代码块
}while(boolean表达式);

do while循环:

先执行一次循环代码块, 再判断boolean表达式

练习:

向控制台输出数字:  100.99.98.97...1

int count = 100;
do{
    System.out.println(count--);

}while(count==0);
  1. for循环

    语法格式:

    for(初始化循环参数;boolean表达式;更新循环变量){
        循环代码块
    } 
    
    for循环执行流程: 
    
        1.  初始化循环参数
    
        2.  判断boolean类型表达式结果是否为true  为true则循环, false则循环结束
    
        3.  执行循环代码块
    
        4.  更新循环变量
    
    在这里4个步骤中循环的是  2 3 4 
    

for循环与while循环:

while(true){}  等价于: for(;true;){}

    //1.    定义循环变量
int count = 1;
    //2.    判断boolean表达式
while(count <=100 ){
    //3.    循环体执行
    //4.更新循环变量;
        count++;
}


//累加:  1+2+3+4...+100 
int sum = 0;
//1.    定义循环变量
int count = 1;
//2.    判断循环条件
while(count<=100){
    //3.    执行循环代码
    sum+=count;
    //4.    更新循环变量
    count++;
}

System.out.println(sum);

int sum = 0;
for(int count=1;count<=100;count++){
    sum+=count;
}
System.out.println(sum);

练习:
找出1-1000这些数字中的水仙花数 :

1   5   3 = 1^3 + 5^3 + 3^3

水仙花数: 

    数字的值, 等于 各个位数上的数字的立方和

使用循环的步骤:

1.  分析一个业务中 具备的   [循环元素 ]
    100-1000

2.  分析这个循环元素中的 循环条件  和 循环的操作
    循环变量小于1000 , 循环操作:判断一个数字是否为水仙花数

3.  套用循环的代码 (可以是while循环, 可以是for循环)

    for(int i=100;i<1000;i++){

    }

    有一个三位的未知数i , 求它是不是水仙花数
    999/100 = 9     999%100=  99/10 = 9     999%10 = 9
    958/100 = 9     958%100=  58/10 = 5     958%10 = 8
    900/100 = 9     900%100=  0/10 = 0      900%10 = 0

    计算百位数:  这个数字除以100 , 得到的结果就是百位数的数字
    计算十位数:  这个数字模以100 , 再除以10 , 得到的结果就是十位数
    计算个位数:  这个数字模以10 , 结果为个位数 !

3   7   0

27  343 0



4.  检查循环是否能够退出 ! (除非遇到特殊的需求, 一般情况下尽量避免死循环的操作)

跳出循环:

break; 这个关键字, 用于跳出代码块 , 再循环中的含义就是: 立即跳出并结束循环

案例: 

for(int i=0;i<100;i++){
    if(i==10){
        break;
    }

    System.out.println(i);
}

跳出本次循环体

continue : 用于再循环中, 结束本次循环体, 开始下次循环体

for(int i=0;i<100;i++){
    if(i==10){
        continue;
    }
    System.out.println(i);
}

多重循环

循环的两层嵌套

例如: for循环的嵌套:

外层循环里面的逻辑, 依然是具备循环色彩的!

for(;;){
    for(;;){
    }
}

案例:

输出10次 1-10

for(int j=0;j<10;j++){
for(int i=1;i<=10;i++){
System.out.print(i+” “);
}
System.out.println();
}

多层循环打印行和列时 , 外层循环控制的是 有多少行 内层循环控制的是有多少列

案例:

通过循环嵌套, 打印99乘法表

1*1=1

1*2=2  2*2=4

1*3=3  2*3=6  3*3=9

....

第1 行 有1列

第2 行 有2列

for(int i=1;i<=9;i++){//外层循环控制行, 表示有9行
    //列的长度是变化的, 与i相同
    for(int j=1;j<=i;j++){
        System.out.println(j+"*"+i+"="+(j*i));
    }

}

作业:
1. 使用*号, 打印三角形:

(1)

*
* *
* * *
* * * *
* * * * *

for(){
    for(){}
}

(2)

----*
---***
--*****
-*******
*********

    for(){
        for(){

        }
        for(){

        }
    }

(3)
—-*
*
*
-*
*
*
—-*

(4)

----*
---* *
--*   *
-*     *
--*   *
---* *
----*
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值