零基础学习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 循环适合不知道循环的次数,或者要求循环的次数