零基础学习java------day4------流程控制结构

1. 顺序结构

代码从上往下依次执行

2. 选择结构

也叫分支结构,其会根据执行的结果选择不同的代码执行,有以下两种形式:

  if  语句

  switch  语句

2.1 if 语句

2.1.1  if语句的第一种形式

格式:

if(关系表达式){
        语句体;
}
执行流程:
            首先判断关系表达式看其结果是true还是false
            如果是true就执行语句体
            如果是false就不执行语句体  

 案例

 1 package com._51doit.javase.day04;
 2 
 3 import java.util.Scanner;
 4 
 5 public class ifDemo1 {
 6     public static void main(String[] args) {
 7         Scanner sc = new Scanner(System.in);
 8         System.out.println("请输入第一个整数:");
 9         int a = sc.nextInt();
10         if(a > 3) {
11             System.out.println("哈哈");
12             
13         }
14         System.out.print("嘿嘿");
15     }
16     
17
18 }

执行结果:

if 语句的注意事项

   if 语句中的大括号是可以省略的,一旦省略,只控制到第一条语句结束(只到第一个分号为止)

   我们在开发的时候,千万别这样写,出问题的话,很难debug

 例如:代码如下

package com._51doit.javase.day04;

public class IfDemoTest {
    public static void main(String[] args) {
        if(3==4)
            System.out.println("哈哈");
            System.out.println("呵呵");
    }
}

上述代码运行结果为      呵呵

 解释:if只能控制到第一条语句结束(即if后的第一个分号为止)

 若将if( 3==4) 改成 if(3==4); 加了个分号,运行的结果为  哈哈   呵呵

 分号“;”相当于{ ;}(其代表空语句,表示砂蜜豆没有)

 

练习:

从键盘录入两个整数,判断两个数据是否相等,
如果是就输出:相等,
不是,输出不相等
1. 使用if 语句完成
2. 使用一条if 语句完成

public class IfTest {
    public static void main(String[] args) {
        //1. 从键盘录入两个整数
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个整数");
        int a = sc.nextInt();
        System.out.println("请输入第二个整数");
        int b = sc.nextInt();
        //2. 使用if语句做判断
        /*if(a == b) {
        System.out.println("相等");
        }
        if(a != b) {
        System.out.println("不相等");
        }*/
        //使用一条语句实现
        String re ="相等";
        if(a!=b) {
            re = "不相等";
        }
        System.out.println(re);
        }
}

 

2.1.2  if语句的第二种形式

格式

if(关系表达式) {
              语句体1;
}else {
              语句体2;
}
执行流程 
首先判断关系表达式看其结果是true 还是false
     如果是true 就执行语句体1
如果是false 就执行语句体2

 案例:

/**
 键盘录入一个整数,判断数据是奇数还是偶数
 */

package com._51doit.javase.day04;

import java.util.Scanner;

public class IfDemo2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个数据");
        int a = sc.nextInt();
        if(a%2==0) {
            System.out.println("偶数");
        }else {
            System.out.println("奇数");
        }
    }
}

 

2.1.3  if语句的第三种形式

格式

if(关系表达式1) {
                语句体1;
}else if (关系表达式2) {
                语句体2;
}
        …
else {
                语句体n+1;
}
流程:
首先判断关系表达式1 看其结果是true 还是false
如果是true 就执行语句体1
如果是false 就继续判断关系表达式2 看其结果是true 还是false 
如果是true 就执行语句体2
如果是false 就继续判断关系表达式…看其结果是true 还是false
如果没有任何关系表达式为true,就执行语句体n+1。

案例

public class IfDemo4 {
    //从键盘录入一个整数,判断是正数,负数,还是0
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数");
        int a = sc.nextInt();
        if(a>0) {
            System.out.println("正数");
        }else if(a==0) {
            System.out.println("是0");
        }else {
            System.out.println("负数");
        }
    }
}        

 

 练习

1. 键盘录入x 的值,计算出y 的并输出。
x>=3         y = 2x + 1;
-1<=x<1    y = 2x;

 x<-1          y = 2x – 1;

 代码如下:

 1 package com._51doit.javase.day04;
 2 import java.util.Scanner;
 3 public class IfTest2 {
 4     public static void main(String[] args) {
 5         Scanner sc = new Scanner(System.in);
 6         System.out.println("请输入x的值");
 7         int x = sc.nextInt();
 8         if(x>=3) {
 9             System.out.println("y="+(2*x+1));
10         }else if(x<1&x>=-1) {
11             System.out.println("y="+2*x);            
12         }else if(x<-1) {
13             System.out.println("y="+(2*x-1));
14         }else {
15             System.out.println("x不合法");
16         }        
17     }
18 }

 

2.2  switch语句

 格式

switch(表达式){
case 常量值1:
    语句体1;
    break;
case 常量值2:  
    语句体2;
    break;
...
default:
    语句体n+1;
    break;
}

 执行流程:

1. 首先计算出表达式的值

2. 其次,和case做比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束,否则一直往下进行

3. 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

表达式的类型

 byte,short,int, char, 枚举   jdk7以后(新加):String

案例:

根据键盘录入的数值1,2,3,.....7  输出对应的星期一,星期二,。。。星期日

package com._51doit.javase.day04;

import java.util.Scanner;

public class SwithDemo {
    public static void main(String[] args) {
        // 输入1-7中的一个数,分别代表周一到周日
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数");
        int day = sc.nextInt();
        switch(day) {
        case 1:
            System.out.println("Monday");
            break;
        case 2:
            System.out.println("Tuesday");
            break;
        case 3:
            System.out.println("Wednesday");
            break;
        case 4:
            System.out.println("Thursday");
            break;
        case 5:
            System.out.println("Friday");
            break;
        case 6:
            System.out.println("Saturday");
            break;
        case 7:
            System.out.println("Sunday");
            break;
        default:
            System.out.println("Are you kidding?");
        }    
    }
}

 

注意事项:

1. case后面只能跟常量,不能跟变量

2. 多个case后面的常量值不能相同

3. case的顺序没有要求,可以放到任意位置

4. default也可以放在任意位置

5. default可以不要

6.break可以省略,如果省略的话,代码会继续向下执行,不管下面的case是否匹配成功,一直执行到再次遇到break,或者是执行到了switch语句结束

如若将所有break不写上面代码运行结果会变成如下,当输入1时:1的结果连同其后面的结果都会打印出来,当输入2时,21的结果连同其后面的结果都会打印出来(1的不会)

7 switch语句何时结束:遇到break,或者代码执行到了switch语句的最后

 

3. 循环结构

让一段代码反复执行很多次

3.1 for 循环

for(初始化语句;判断条件语句;控制条件语句) {
    循环体语句体;
}

执行流程:

(1)执行初始化语句

(2)执行判断条件语句,看其结果是true还是false,如果是false,循环结束

(3)执行循环体语句

(4)执行控制条件语句

(5)回到(2)继续

案例:

1  打印100句话

package com._51doit.javase.day04;
// 打印100句话
public class ForDemo{
    public static void main(String[] args) {
        for(int i=1;i<100;i++) {
            System.out.println("学大数据的我");
        }
    }
}

2. 求1-100奇数和偶数和

 

package com._51doit.javase.day04;

public class ForDemo{
    public static void main(String[] args) {
        int oldNumberCount = 0;
        int evenNumberCount = 0;
        for(int i=1;i<=100;i++) {
            if(i%2==0) {
                evenNumberCount += i;
            }else {
                oldNumberCount += i;
            }
        }
        System.out.println("1-100中的偶数和为"+evenNumberCount);
        System.out.println("1-100中的奇数和为"+oldNumberCount);

3. 请统计1-1000之间分别满足如下条件的数据有多少

    对3整除余2;对5整除余3;对7整除余2;

/*
 请统计1-1000之间分别满足如下条件的数据有多少个

    对3整除余2;对5整除余3;对7整除余2;
 **/

package com._51doit.javase.day04.loop;

public class ForTest {
    public static void main(String[] args) {
        int a=0;
        int b=0;
        int c=0;
        for(int i=1; i<=1000; i++) {
            if(i%3 == 2) {
                a += 1;
            }
            if(i%5 ==3 ) {
                b += 1;
            }
            if(i%7 == 2) {
                c += 1;
            }    
        }
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
    }
}

注意,此处不能用else if(要用if),因为else if只要满足条件,后面的代码就不会运行了,但有些数据可能既满足条件1也满足条件2或3,这样就会漏算

 3.2 while循环

 格式:

 初始化语句;
 while(判断条件语句) {
     循环体语句体;
     控制条件语句;
 }

案例

1. 打印1-100的数

package com._51doit.javase.day04.loop;

public class WhileDemo {
    public static void main(String[] args) {
        int i = 1;
        while(i <= 100) {
            System.out.println(i);
            i++;
        }
    }
}

2. 一座山峰的高度为8848m,加入有一张足够大的纸,厚度为0.01m,请问需要折多少次才能保证纸的厚度不低于山峰的高度

/*
 一座山峰的高度为8848m,加入有一张足够大的纸,厚度为0.01m,请问需要折多少次才能保
 证纸的厚度不低于山峰的高度
 **/

package com._51doit.javase.day04.loop;

public class WhileDemo2 {
    public static void main(String[] args) {
        double hight = 0.01;
        int num = 0;
        while(hight < 8848) {
            hight *=2;
            num++;
        }
        System.out.println(num);
    }
}

 

两种循环的对比:

     for 循环适合针对一个范围判断进行操作

     while 循环适合不知道循环的次数,或者要求循环的次数

   

 

posted @ 2019-08-04 21:31  一y样  阅读(197)  评论(0编辑  收藏  举报