流程控制
-
什么是流程控制?
-
Java给我们提供了某些语句,该语句可以让我们的代码的执行过程可控话。
-
流程可控化,不是由天马行空的想法实现的,而已由Java提供的语句决定的。
-
-
Java中流程控制的分类:
-
顺序结构
-
选择结构
-
循环结构
-
-
顺序结构
-
什么是顺序结构
-
顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。
-
-
选择结构
-
if流程控制语句
-
什么是if语句
-
if流程控制语句
-
他有三种结构
-
格式一:
//小括号里的长度不限,只看结果是不是boolean类型 if (boolean){ }
题目:摘苹果的人 身高不固定,每次键盘录入,人踩着凳子摘苹果,板凳高30cm,现在已知 10 个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。
输入格式:输入包括两行数据。第一行包含 10 个 100到 200 之间(包括 100和 200 )的整数(以厘米为单位)分别表示 10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个 100 到 120 之间(包含 100 和 120 )的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
import java.util.Scanner; public class Demo3 { public static void main(String[] args) { //建一个储存数据的容器 int[] arr = new int[10]; //算出来陶陶加上板凳最高能摸到多高 System.out.println("请输入陶陶把手伸直的时候能够达到的最大高度"); Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int c=a+30; //输入十个苹果离地距离数据 System.out.println("苹果距离地面的距离"); int sum =0; for (int i = 0;i< arr.length;i++){ arr[i]=sc.nextInt(); if (c>=arr[i]){ sum++; //System.out.println("能够到的:"+arr[i]); } } //计算出结果值 System.out.println(sum); } }
总结:
if流程控制语句结构一,功能太单一,只能进行一次有效控制,如果想要进行两次控制,则需要再加if结构一,这样的话,效果虽然能够实现,但是代码的重复率高。
格式二:
if (boolean){ }else{ } } //解决了两次选择问题
练习题:键盘录入一个数字,如果这个数既能被 3 整除又能被 5 整除,则打印 yes,否则打印 no
import java.util.Scanner; public class Demo1 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //输入一个数字 int a = scanner.nextInt(); if(a%3==0 && a%5==0){ System.out.println("yes"); } else { System.out.println("no"); } } }
格式三:
if (boolean){ }else if(boolean){ } //注意:只有当if小括号中boolean为true,才会进if执行语句,否则进下一个选择流程
Switch(开关)
-
格式详解
-
-
switch表示这是switch语句
-
表达式的取值:byte,short,int,char
-
JDK5以后可以是枚举
-
JDK7以后可以是String
-
-
case后面跟的是要和表达式进行比较的值
-
语句体部分可以是一条或多条语句
-
break表示中断,结束的意思,可以结束switch语句
-
default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
-
-
执行流程
-
首先计算出表达式的值
-
其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
-
最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
-
-
-
-
public class Demo { public static void main(String[] args) { switch (表达式){ case 1: 语句体1; break; case 2: 语句体2; break; case 3: 语句体3; break; default: 语句体; break; } } }
-
注意事项
-
case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
-
default可以省略吗?
-
可以省略。一般不建议。除非判断的值是固定的。(单选题)
-
-
break可以省略吗?
-
可以省略,一般不建议。否则结果可能不是你想要的(击穿)
-
-
default的位置一定要在最后吗?
-
可以出现在switch语句任意位置。
-
-
switch语句的结束条件
-
遇到break
-
-
-
循环结构
-
for循环
-
什么是for语句?
-
for语句是循环控制结构中使用最广泛的一种循环控制语句,特别适合已知循环次数的情况。
-
for循环的格式
-
//初始化语句:它是for循环的入口,随便写,只要是数据就行 for (初始化语句;条件判断;循环后的结操作){ 语句体; } //条件判断:决定了是否下次循环boolean类型结果,如果是true,继续下次执行,如果是fales则终止循环
-
while循环
-
循环语句while
while循环语句和选择结构if语句有些相似,都是根据条件判断来决定是否执行大括号内的执行语句。区别在于,while语句会反复地进行条件判断,只要条件成立,{}内的执行语句就会执行,直到条件不成立,while循环结束。while循环语句的语法结构如下:
while(循环条件){
执行语句 循环后的操作;
}
在上面的语法结构中,{}中的执行语句被称作循环体,循环体是否执行取决于循环条件。当循环条件为true时,循环体就会执行。循环体执行完毕时会继续判断循环条件,如条件仍为true则会继续执行,直到循环条件为false时,整个循环过程才会结束。
-
do ... while
-
do…while循环语句和while循环语句功能类似,其语法结构如下:
do {
执行语句 ………
} while(循环条件);
在上面的语法结构中,关键字do后面{}中的执行语句是循环体。do…while循环语句将循环条件放在了循环体的后面。这也就意味着,循环体会无条件执行一次,然后再根据循环条件来决定是否继续执行。
-
循环嵌套
-
嵌套循环是指在一个循环语句的循环体中再定义一个循环语句的语法结构。while、do…while、for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套,如最常见的在for循环中嵌套for循环,格式如下:
-
-
内存循环是外循环的“循环体"
-
外循环想要进行下一循环,必须等待内循环全部执行完
-
双层循环什么时候终止?
-
外循环终止了,双层循环就会结束!
-
-
-
外控行,内控列
-
-
for(初始化表达式; 循环条件; 操作表达式) { for(初始化表达式; 循环条件; 操作表达式) { 执行语句 ; } }
-
-
无限死循环
-
最简单无限循环格式:
while(true){}
或 for(;;){}
无限循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环。
-
结束循环的方式
-
跳转语句用于实现循环执行过程中程序流程的跳转,在Java中的跳转语句有break(结束循环)语句和continue(跳出本次循环)、return(结束方法)语句。
循环还可以做标记
+ ++++++++++ package 年月日计算第几天;典型例题
package 年月日计算第几天;
import java.util.Scanner;
public class Demo1 {
public static void main(String[] args) {
//什么都不会,先想录入数据总还是会的
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份:");
int year = sc.nextInt();
System.out.println("请输入月份:");
int month = sc.nextInt();
System.out.println("请输入日子:");
int day = sc.nextInt();
//要求总天数,先建一个变量接住
int sum = 0 ;
switch (month){
case 12:sum+=30;
case 11:sum+=31;
case 10:sum+=30;
case 9:sum+=31;
case 8:sum+=31;
case 7:sum+=30;
case 6:sum+=31;
case 5:sum+=30;
case 4:sum+=31;
case 3:sum+=28;
case 2:sum+=31;
case 1:sum+=day;
if (year%4==0&&year%100!=0|year%400==0&&month>=3){
sum++;
}
}
System.out.println("今天是:"+year+"第"+sum+"天");
}
}