Skip to content

流程控制

流程控制:

程序需要根据不同的条件去进行不同的流程处理,在程序中我们称之为流程控制。 举例:用户输入4位卡号,每位数字之和大于20,中奖,小于20则不中奖。

if

语法: if(判断条件){ //条件成立 }else{ //条件不成立 }

if-esle是Java中最基本的流程控制语句 if后面必须跟(条件) else后面不能有(),可以直接跟{} 也可以再跟一个if() else{}可以继续嵌套if语句

java
// 学校举办运动会,百米赛跑成绩13秒以内有资格进入决赛,根据性别分别进入男子组和女子组。
public class Test3 {
	public static void main(String[] args) {
		System.out.println("请输入张三的百米成绩");
		Scanner scanner = new Scanner(System.in);
		int score = scanner.nextInt();
		System.out.println("请输入张三的性别");
		String gender = scanner.next();

		if(score<13) {
			if(gender.equals("男")) {
				System.out.println("进入男子组");
			}else {
				System.out.println("进入女子组");
			}
		}else {
			System.out.println("很遗憾,你被淘汰了!!!");
		}
		
	}
}

String类型的值比较是否相等 不能用 == 应该用equals方法进行判断

switch case

语法: switch(要判断的变量){ case 特定值1: // case 特定值2: // ... } switch-case和if-else的区别是 switch-case只能处理等值判断,不能处理大于/小于判断 if-else任何判断都可以处理

如果变量满足某个case语句, 则会执行该语句的逻辑代码,同时 该case之后的所有case不再做判断, 统一认为全部满足,逻辑代码都会执行。

如何解决: 在每一个case的逻辑代码结束之后,添加break;

switch支持的数据类型: int,short,byte,char 枚举类型,String类型 (jdk1.7之后的版本支持)

java
public class Test4 {
	public static void main(String[] args) {
		System.out.println("请输入一个数字");
		Scanner scanner = new Scanner(System.in);
		String str = "";
		switch(str) {
			case "1":
				System.out.println("中了一个三等奖");
				break;
			case "20":
				System.out.println("中了二等奖");
				break;
			case "30":
				System.out.println("中了一等奖");
				break;
			default:
				System.out.println("很遗憾,您没有中奖!");
				break;
		}
		
	}
}

循环

for foreach:增强型for循环 while do-while

语法:

for: for(初始化循环变量;循环条件;更新循环变量){ 循环体; }

while: 初始化循环变量; while(循环条件){ 循环体; 更新循环变量; }

do-while: 初始化循环变量; do{ 循环体; 更新循环变量; }while(循环条件);

while和do-while的区别

while循环先判断,再执行。 do-while先执行,再判断。 while有可能一次都不执行。 do-while至少会执行一次。

for循环和while(do-while)的区别:

for适用于次数确定的循环 while,do-while适用于次数不确定的循环

循环四要素:

1.初始化循环变量; 2.循环条件; 3.迭代:更新循环变量; 4.循环体;

首先执行初始化循环变量,只执行一次。 判断循环条件是否成立,如果成立,执行循环体, 如果不成立,进行下一次循环,多次执行。 更新循环变量,多次执行。 循环体,多次执行

java
public class Test5 {
	public static void main(String[] args) {
		for(int i = 1;i <= 10000;i++) {
			System.out.println(i+":Hello World");
		}
	}
}

🌰

java
// 1.循环输入张三考试的五门成绩,分别打印输出,并且计算平均分。
import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		float score1 = 0.0f;
		float score2 = 0.0f;
		float score3 = 0.0f;
		float score4 = 0.0f;
		float score5 = 0.0f;
		for(int i = 1; i <= 5; i++) {
			System.out.print("请输入张三的第"+i+"门成绩:");
			switch(i) {
				case 1:
					score1 = scanner.nextFloat();
				break;
				case 2:
					score2 = scanner.nextFloat();
				break;
				case 3:
					score3 = scanner.nextFloat();
				break;
				case 4:
					score4 = scanner.nextFloat();
				break;
				case 5:
					score5 = scanner.nextFloat();
				break;
			}
		}
		System.out.println("张三的第1门成绩:"+score1);
		System.out.println("张三的第2门成绩:"+score2);
		System.out.println("张三的第3门成绩:"+score3);
		System.out.println("张三的第4门成绩:"+score4);
		System.out.println("张三的第5门成绩:"+score5);
		System.out.println("张三的平均成绩是"+(score1+score2+score3+score4+score5)/5);
	}
}
java
// 2.任意输入一个整数:6
// 打印如下的加法表:
// 0 + 6 = 6
// 1 + 5 = 6
// 2 + 4 = 6
// 3 + 3 = 6
// 4 + 2 = 6
// 5 + 1 = 6
// 6 + 0 = 6

import java.util.Scanner;

public class Test4 {
	public static void main(String[] args) {
		System.out.print("请输入一个整数:");
		Scanner scanner = new Scanner(System.in);
		int num = scanner.nextInt();
		for(int i = 0; i < num+1; i++) {
			System.out.println(i + "+" + (num-i) + "=" + num);
		}
	}
}
java
// 3.打印:如下图形
//     *****
//    *****
//   *****
//  *****
// *****

public class Test7 {
	public static void main(String[] args) {
		for(int j = 0; j < 5; j++) {
			//输出空格
			for(int i = 0; i < 4 - j; i++) {
				System.out.print(" ");
			}
			System.out.println("*****");
		}
	}
}
java
// 4.打印如下图形
//              i     空格    *
//     *        0     4      1  
//    ***       1     3      3
//   *****      2     2      5
//  *******     3     1      7
// *********    4     0      9

public class Test8 {
	public static void main(String[] args) {
		for(int i = 0 ;i < 5; i++) {
			//输出空格
			for(int j = 0; j < 4-i; j++) {
				System.out.print(" ");
			}
			//输出*
			for(int k = 0; k < 2*i+1; k++) {
				System.out.print("*");
			}
			//输出空格
			for(int j = 0; j < 4-i; j++) {
				System.out.print(" ");
			}
			System.out.println();
		}
	}
}
java
// 5.打印如下图形
//     *        
//    ***       
//   *****      
//  *******     
// ********* 
//  ******* 
//   ***** 
//    ***    
//     *

public class Test9 {
	public static void main(String[] args) {
		//上半部分
		for(int i = 0 ;i < 5; i++) {
			//输出空格
			for(int j = 0; j < 4-i; j++) {
				System.out.print(" ");
			}
			//输出*
			for(int k = 0; k < 2*i+1; k++) {
				System.out.print("*");
			}
			//输出空格
			for(int j = 0; j < 4-i; j++) {
				System.out.print(" ");
			}
			System.out.println();
		}
		
		//下半部分
		for(int i = 0 ;i < 4; i++) {
			//输出空格
			for(int j = 0; j < i+1; j++) {
				System.out.print(" ");
			}
			//输出*
			for(int k = 0; k < 7-2*i; k++) {
				System.out.print("*");
			}
			//输出空格
			for(int m = 0; m < i+1; m++) {
				System.out.print(" ");
			}
			System.out.println();
		}
	}
}
java
// 6.输出9*9乘法口诀表
// 1*1 = 1
// 2*1 = 2 2*2 = 4
// 3*1 = 3 3*2 = 6 3*3 = 9
// ...

public class Test10 {
	public static void main(String[] args) {
		for(int i = 1; i <= 9; i++) {
			for(int j = 1; j <= i; j++) {
				System.out.print(i+" * "+j+" = "+i*j+"\t");
			}
			System.out.println();
		}
	}
}
java
// 7.循环输入张三考试的五门成绩,分别打印输出,并且计算平均分,如果操作不当,输入了负数,停止录入并提示错误。
import java.util.Scanner;

public class Test11 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		float score1 = 0.0f;
		float score2 = 0.0f;
		float score3 = 0.0f;
		float score4 = 0.0f;
		float score5 = 0.0f;
		//用户是否输入了负数
		boolean flag = false;
		for(int i = 1; i <= 5; i++) {
			System.out.print("请输入张三的第"+i+"门成绩:");
			float score = scanner.nextFloat();
			//如果输入的成绩<0,则跳出循环
			if(score < 0) {
				flag = true;
        // 当程序执行break时,直接停止当前循环,break之后的代码,不再执行;同时跳出整个循环体,不再执行后续的循环。
				break;
			}
			switch(i) {
				case 1:
					score1 = score;
				break;
				case 2:
					score2 = score;
				break;
				case 3:
					score3 = score;
				break;
				case 4:
					score4 = score;
				break;
				case 5:
					score5 = score;
				break;
			}
		}
		if(flag) {
			System.out.println("您输入有误!请重新输入");
		}else {
			System.out.println("张三的第1门成绩:"+score1);
			System.out.println("张三的第2门成绩:"+score2);
			System.out.println("张三的第3门成绩:"+score3);
			System.out.println("张三的第4门成绩:"+score4);
			System.out.println("张三的第5门成绩:"+score5);
			System.out.println("张三的平均成绩是"+(score1+score2+score3+score4+score5)/5);
		}
	}
}
java
// 8.计算1-10之间的整数之和,如果得到的累加值大于30,则停止循环,返回当前累加值。
public class Test12 {
	public static void main(String[] args) {
		int sum = 0;
		for(int i = 1; i <= 10; i++) {
			sum += i;
			if(sum > 30) {
				sum -= i;
				break;
			}
		}
		System.out.println(sum);
	}
}

跳出循环 break:跳出整个循环。 continue:跳出本次循环,进入下一次循环。

java
// 循环录入5名学生的成绩,统计成绩大于80分的学生比例。
// 求出1-10之间的偶数和。
import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		//定义变量,记录大于80分的人数
		int num = 0;
		Scanner scanner = new Scanner(System.in);
		int score = 0;
		for(int i = 0; i < 5; i++) {
			System.out.print("请输入第"+(i+1)+"位学生的成绩:");
			score = scanner.nextInt();
			if(score > 80) {
				num++;
			}
		}
		System.out.println(num/5.0);
	}
}

使用continue

java
import java.util.Scanner;

public class Test2 {
	public static void main(String[] args) {
		//定义变量,记录大于80分的人数
		int num = 0;
		Scanner scanner = new Scanner(System.in);
		int score = 0;
		for(int i = 0; i < 5; i++) {
			System.out.print("请输入第"+(i+1)+"位学生的成绩:");
			score = scanner.nextInt();
			if(score <= 80) {
				continue;
			}
			num++;
		}
		System.out.println(num/5.0);
	}
}

断点调试,在程序的某一行添加断点(breakpoint), 通过调试(debug)模式运行程序,当程序执行到断点处时,就会暂停下来。

F8:跳到下一个断点处 F5:跳到当前代码所调用的方法内部 F6:跳到当前代码的下一个逻辑单位处