在程序中,程序运行的流程控制决定程序是如何执行的。
顺序控制
介绍: 程序从上到下的逐行的执行,中间没有任何判断和跳转。
使用:java中定义变量时,采用合法的前向引用。如:
public class Test{
int num1 = 12;
int num2 = num1 + 2;
System.out.println(num2);
// 错误写法
int num2 = num1 + 2; // 找不到num1变量
int num1 = 12;
}
分支控制(if, else,switch)
介绍:让程序有选择的执行,分支控制有三种
1)单分支
if (条件表达式){
执行代码块;(可以有多条语句)
}
当条件表达式为true时,就会执行{}的代码。如果为false时,就不执行。
特别注意:如果{}中只有一条语句时,可以不用{},建议写上{}。
// if 的快速入门
import java.util.Scanner;
public class if01{
public static void main(String[] args) {
// 输入人的年龄,大于18,则输出:成年人。
// 思路分析:
// 1、接收输入的年龄
// 2、把年龄保存到变量
// 3、使用if判断
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入年龄:");
int age = myScanner.nextInt();
if (age > 18){
System.out.println("年龄大于18岁,是成年人了");
}
System.out.println("程序继续执行");
}
}
2)双分支
if (条件表达式){
执行代码块1;
}
else{
执行代码块2;
}
当条件表达式成立时,及执行代码块1,否则执行代码块2。如果执行的代码块只有一条语句,则{}可以省略,不推荐使用。
// if 的快速入门
import java.util.Scanner;
public class if01{
public static void main(String[] args) {
// 输入人的年龄,大于18,则输出:成年人。
// 思路分析:
// 1、接收输入的年龄
// 2、把年龄保存到变量
// 3、使用if,else判断
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入年龄:");
int age = myScanner.nextInt();
if (age > 18){
System.out.println("年龄大于18岁,是成年人了");
} else { // 双分支
System.out.println("年龄小于18岁,未成年");
}
System.out.println("程序继续执行");
}
}
测试题
public class IfExercise01{
public static void main(String[] args) {
// 声明两个double类型的变量并赋值
// 判断当第一个数大于10.0,且第二个数小于20.0时,打印两数之和。
double num1 = 13;
double num2 = 12;
if (num1 >10 && num2 < 20){
System.out.println("输出结果" + (num1 + num2));
}
}
}
public class IfExercise01{
public static void main(String[] args) {
// 声明两个int类型的变量并赋值,判断两者之和是否能被3又能被5整除,打印提示信息。
int num1 = 12;
int num2 = 18;
int sum = num1 + num2;
if (sum % 3 ==0 && sum % 5==0){
System.out.println("两数之和可以整除3和5");
}
}
}
3)多分支
if (条件表达式1){
执行代码块1;
} else if (条件表达式2){
执行代码块2;
}
......
else{
执行代码块n;
}
特别说明:
- 多分支,可以没有else。
// if 的快速入门
import java.util.Scanner;
public class if01{
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入信用分:");
// 如果输入的是一个字符串该怎么办呢,这里使用异常处理进行解决。
int score = myScanner.nextInt();
if (score <= 100 && score >0){
if (score ==100){
System.out.println("信用极好");
} else if (80<score && score <=99) {
System.out.println("信用优秀!!!");
} else if (60 <= score && score <= 80) {
System.out.println("信用一般");
} else {
System.out.println("信用不及格");
}
} else {
System.out.println("信用分需要在1-100之间,请重新输入");
}
}
}
switch分支结构
switch(表达式){
case 常量1:
语句块1;
break;
case 常量2:
语句块2;
break;
case 常量n:
语句块n;
break;
default:
default语句块;
}
1、witch关键字,表示switch分支
2、表达式对应一个值,可以是返回的值
3、case 常量1; 当表达式的值等于常量1时,就执行语句块1
4、break: 表示退出switch
5、如果和case常量1匹配就执行语句块1,如果不匹配则继续匹配case 常量2
6、如果一个都没有匹配上,则执行default。
switch注意事项和细节讨论
1、表达式中的数据类型,应该和case中的常量类型一致,或者是可以自动转成可以相互比较的类型。
2、switch中的表达式返回值必须是:byte、short、int、char、enum、String 注意没有double
通过1和2两个规则,决定了在case中byte、short、int、char为一类【自动提升为int类型】,string自己一类,enum之后再说。
3、case 中的值必须是常量,不能是变量。
4、default子句是可选的,也可以不写,当不写时,如果前面的case都不匹配时,则输出为空。
5、break语句用来在执行完case分支后使程序跳出switch语句块,如果没有break,程序会顺序执行到switch结尾。
练习题
int num = 12;
switch (num){
case 3:
case 4:
case 5:
System.out.println("春季");
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
System.out.println("秋季");
break;
case 12:
case 1:
case 2:
System.out.println("冬季");
System.out.println("冬季");
break;
}
注意:switch中的default和break的作用范围。
0118_韩顺平Java_switch课堂练习1_哔哩哔哩_bilibili
switch和if的比较
1、如果判断的具体数值不多,而且符合 byte、short、int、char、enum、String这6种类型。虽然两个语句都可以使用,建议使用switch语句
2、其他情况,对区间的判断,对结果为bioolean类型判断,使用if,if的使用范围更广。
循环控制(for、while、dowhile、多重循环)
基本语法
for (循环变量初始化; 循环条件; 循环变量迭代){
循环体(可以多条语句);
}
注意事项
1、循环条件返回的是一个布尔值的表达式
2、for(;循环判断条件;)中的初始化和变量迭代可以写到其他地方,但是两边的分号不能省略
public class for01{
public static void main(String[] args) {
int i = 1;
for (; i <=10;) {
System.out.println("您好" + i);
i++;
}
System.out.println(i);
}
}
3、循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开。循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。
public class for01{
public static void main(String[] args) {
for (int i=0, j = 0; i <=10; i++, j+=2) {
System.out.println("i=" + i+ "; j=" + j);
}
}
}
编程思想:1、化繁为简2、先死后活
While循环
基本结构
while (循环条件){
循环体(语句);
循环变量迭代;
}
// 循环结构四要素:循环变量初始化、循环条件、循环体、循环变量迭代
public class while01{
public static void main(String[] args) {
int count = 1;
while (count <= 10){
System.out.println("niaho" + count);
count++;
}
}
}
注意事项和细节说明
1、循环条件是返回一个布尔值的表达式
2、while循环同for循环,是先判断再执行语句。
do while循环控制
基本语法
循环变量初始化;
do{
循环体(语句);
循环变量迭代;
}while(循环条件);
说明
1、循环四要素,只是位置不同
2、先执行,再判断,也就是说,最少执行一次
3、最后的while有个分号 ;
4、while 和do while 的区别:要账
注意事项和细节说明
1、循环条件是返回一个布尔值的表达式
2、do while循环是先执行,再判断,因此至少执行一次。
public class dowhile01{
public static void main(String[] args){
int i =1;
int count = 0;
do{
if ((i % 5 == 0) && (i %3!=0)){
count++;
}
i++;
}while(i <=200);
System.out.println("个数为:" + count);
}
}
多重循环
1、循环最多不要超过三层,会造成可读性比较差。
测试题
for (int i=1;i<=9;i++){
for (int z = 1; z<=i; z++){
System.out.print(i + "*" + z + "=" + i*z + "\t");
};
System.out.println();
}
public class stars{
public static void main(String[] args){
int totalLevel = 100;
for (int level=1; level <= totalLevel; level++){
// 打印每行的空格
for (int space=1; space <= totalLevel-level; space++){
System.out.print(" ");
}
// 打印每行的 *
for (int star=1; star <= 2 * level -1; star++){
if (star==1 || star==2 * level -1 || level==totalLevel){
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.println();
}
}
}
break
基本介绍
break语句用于终止某个语句块的执行,一般使用在switch或者循环中。
注意事项和细节说明
1、break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块。
2、标签的基本使用
public class break01{
public static void main(String[] args){
label01:
for (int j =0; j < 4; j++){
label02:
for (int i=0; i<10; i++) {
if (i==2){
break label01;
}
System.out.println("i=" + i);
}
}
}
}
continue
基本介绍
1、continue语句用于结束本次循环,继续执行下一次循环
2、continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环,这个和break中的标签使用规则一样。
public class Continue01{
public static void main(String[] args){
label01:
for (int j =0; j < 4; j++){
label02:
for (int i=0; i<10; i++) {
if (i==2){
continue label01;
}
System.out.println("i=" + i);
}
}
}
}
return
简介
return使用在方法中,表示跳出所在的方法。
注意:**如果在main方法中使用return。**则会退出程序,这是和break的区别。
public class Return01{
public static void main(String[] args){
getMethod();
System.out.println("sss");
}
public static void getMethod(){
for (int i =1; i<3;i++){
if (i==2){
return;
}
System.out.println("i="+i);
}
}
}
测试题
1、输出1-100之间不能被5整除的数,每5个一行。
public class Work{
public static void main(String[] args){
int count =0;
for(int num=1; num<=100; num++){
if (num % 5 != 0){
System.out.print(num + "\t");
count++;
if (count % 5 == 0){
System.out.println();
}
}
}
}
}
2、输出小写字母a-z
for (char a = 'a'; a<='z'; a++){ //关键对char的使用
System.out.print(a+"\t");
}
3、求出1-1/2 + 1/3 -1/4 + 1/5 -1/6 + … + 1/97 - 1/98 + 1/99 - 1/100 的和