程序的流程控制一般分为3种:顺序结构、分支结构、循环结构
-
顺序结构:就是不加任何控制,代码从main方法开始自上而下执行
-
分支结构:就是根据条件判断是true还是false,有选择性的执行哪些代码。在Java语言中提供了两个格式if 、 switch
-
循环结构:就是控制某一段代码重复执行。
分支结构
if分支
//1、单分支if结构
/*
if(条件表达式){
代码
}
*/
// 需求:测量用户体温,发现体温高于37度就报警。
double temp = 38;
if (temp > 37) {
System.out.println("这个人体温不正常,快把他抓走");
System.out.println("这个人体温不正常,快把他抓走");
System.out.println("这个人体温不正常,快把他抓走");
}
System.out.println("我是代码的剩余部分");
//2、双分支if结构
/*
if(条件表达式){
代码
}else{
代码
}
*/
// 需求2:发红包,你的钱包余额是99元,现在要发出90元
// 如果钱够触发发红包的动作,如果钱不够,则提示:余额不足。
public static void main(String[] args) {
// 需求2:发红包,你的钱包余额是99元,现在要发出90元
// 如果钱够触发发红包的动作,如果钱不够,则提示:余额不足。
System.out.println("我要开始发红包了");
double balance = 89;
if (balance > 90) {
balance -= 90;
System.out.println("你的余额是" + balance);
} else {
System.out.println("余额不足");
}
System.out.println("继续执行main方法");
}
//3、多分支if结构
/*
if(表达式1){
代码
}else if(表达式2){
代码
}else if(表达式2){
代码
}else{
代码
}
*/
// 需求3:某个公司有一个绩效系统,根据员工的打分输出对应的绩效级别。[0,60) D[60,80) C [80,90) B [90,100] A
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入员工打分成绩");
double score = sc.nextDouble();
if (score >= 0 && score < 60) {
System.out.println("员工绩效级别:D");
} else if (score < 80) {
System.out.println("员工绩效级别:C");
} else if (score < 90) {
System.out.println("员工绩效级别:B");
} else if (score <= 100) {
System.out.println("员工绩效级别:A");
} else {
System.out.println("你输入的成绩不合理");
}
System.out.println("继续执行main方法");
}
//4、嵌套if控制语句
/*
if(表达式1){
if (表达式2){
语句1
}else{
语句2
}
}else{
if (表达式3){
语句3
}else{
语句4
}
*/
switch分支
// 先输入年份,在输入一个月份,返回这个月多少天
import java.util.Scanner;
public class Demo01 {
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();
if (year%4==0 && year%100!=0 || year%400==0) {
switch (month){
case 1, 3, 5, 7, 8, 10, 12-> System.out.println("这个月有31天");
case 4,6,9,11 -> System.out.println("这个月有30天");
case 2 -> System.out.println("这个月有29天");
}
}
else {
switch (month){
case 1, 3, 5, 7, 8, 10, 12-> System.out.println("这个月有31天");
case 4,6,9,11 -> System.out.println("这个月有30天");
case 2 -> System.out.println("这个月有28天");
}
}
}
}
switch分支新特性
1、箭头表达式
2、yield
if 、switch如何选择
-
如果是对一个范围进行判断,建议使用if分支结构
-
如果是与一个一个的值比较的时候,建议使用switch分支结构
8/3
循环结构
while循环
/*
初始化语句;
while(循环条件){
循环体语句;
迭代语句;
}
*/
// 例:打印5行Hello kfm
int a = 0;
while (a < 5) {
System.out.println("hello kfm");
a ++;
}
//世界最高山峰珠穆朗玛峰高度是:8848.86米 = 8848860 毫米,假如我有一张足够大的它的厚度是0.1毫米。请问:该纸张折叠多少次,可以折成珠穆朗玛峰的高度?
public class Demo01 {
public static void main(String[] args) {
int num = 0;
double i = 0.1;
while(i < 8848860){
i*=2;
num ++;
}
System.out.println(num);
}
}
// 编写一个循环,计算并输出从 1到10的所有整数的平方
public class Demo03 {
public static void main(String[] args) {
int num = 0;
int i = 1;
while (i <= 10){
num = i*i;
i++;
System.out.println(num);
}
}
}
for循环
for (表达式1; 表达式2; 表达式3) {
循环体
}
// 表达式1 : 循环变量的初始化
// 表达式2 : 循环条件
// 表达式3 : 改变循环变量的值
// 循环体 :要重复循环的部分
// 例:打印3行Hello World
for (int i = 0; i < 3; i ++) {
System.out.println("hello world");
}
//编写一个Java程序,使用for循环输出所有7的倍数,直 直到200为止
package day4;
public class Demo02 {
public static void main(String[] args) {
//编写一个Java程序,使用for循环输出所有7的倍数,直 直到200为止
for (int i = 1;i<=200;i++){
if (i%7==0){
System.out.println(i);
}
}
}
}
//编写一个循环,计算并输出从 1 到 100 之间所有偶数的和
public class Demo04 {
public static void main(String[] args) {
//编写一个循环,计算并输出从 1 到 100 之间所有偶数的和
int num = 0;
for(int i=0;i<=100;i+=2){
num+=i;
}
System.out.println(num);
}
}
//编写一个循环,计算并输出从 10 到1之间所有奇数的乘积
public class Demo5 {
public static void main(String[] args) {
//编写一个循环,计算并输出从 10 到1之间所有奇数的乘积
int num = 1;
for (int i = 9;i>=1;i-=2){
num *= i;
}
System.out.println(num);
}
}
do-while循环
初始化语句;
do{
循环体语句;
迭代语句;
}while(循环条件);
死循环
// for死循环
for ( ; ; ){
System.out.println("Hello World1");
}
// while死循环
while (true) {
System.out.println("Hello World2");
}
// do-while死循环
do {
System.out.println("Hello World3");
}while (true);
嵌套循环
//输出三角形;
public class Demo06 {
public static void main(String[] args) {
//输出三角形;
int n = 5;
for (int i =1;i<=n ;i++){ //控制行的输出
for (int j=1;j<=n-i;j++){ //输出空格
System.out.print(" ");
}
for(int s=1;s<=2*i-1;s++){ //输出 *
System.out.print("*");
}
System.out.println();
}
}
}
//输出一个九九乘法表;
public class Demo07 {
public static void main(String[] args) {
//输出一个九九乘法表;
int pro=1;
for (int i =1;i<=9;i++){
for (int j=1;j<=i;j++){
pro =i*j;
System.out.print(j+"*"+i+"="+pro+"\t");
if(i == j){
System.out.print("\n");
}
}
}
}
}
跳转语句
标签
标签可以放在for、while或do语句之前,其语法格式为:
标签:语句;
break
/
/ break:跳出并结束当前所在循环的执行。
// 场景:假如你有老婆了,你犯错了,你老婆罚你说:5句我爱你
// 说到第三句的时候心软了,让你别再说了。
for (int i = 0; i < 5; i ++) { // i = 0 i = 1 i = 2 i = 3
if (i == 3) {
break;
}
System.out.println("我爱你");
}
continue
// continue:跳出当前循环的当次执行,直接进入循环的下一次执行。
// 场景: 假如你有老婆,你犯错了,你老婆罚你洗碗5天。
// 第三天的时候,你表现很好,第三天不用洗碗,但是不解恨,第四天还是要继续的。
for (int i = 0; i < 5; i ++) { // i = 0 i = 1 i = 2 i = 3 i = 4
if (i == 3) {
continue;
}
System.out.println("洗碗");
}
循环结构总结
1. 什么是流程控制
答:流程控制是用来控制程序的执行顺序的
2. 分支结构if和switch,如何选择?
答:if分支:一般用于对一个范围进行判断
switch分支:对一个一个值进行匹配
3. for循环和while循环、do-while如何循环
答:知道循环次数用for、不知道循环次数用while
想要先执行,再判断,用do-while
生成随机数
// 目标:掌握使用Random生成随机数的步骤。
// 1、导包。import java.util.Random; (idea会自动完成)
import java.util.Random;
public class RandomDemo1 {
public static void main(String[] args) {
// 2、创建一个Random对象,用于生成随机数。
Random r = new Random();
// 3、调用Random提供的功能:nextInt得到随机数。
for (int i = 1; i <= 20; i++) {
int data = r.nextInt(10); // [0 - 9]
System.out.println(data);
}
}
}
//随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中 结束游戏
import java.util.Random;
import java.util.Scanner;
public class Demo08 {
public static void main(String[] args) {
Random ra = new Random();
int i = ra.nextInt(100)+1; //生成1-100的一个随机数;
Scanner sc = new Scanner(System.in);
while (true){
System.out.print("请输入一个一百以内的数:");
int j=sc.nextInt();
if (i ==j ){
System.out.println("猜测成功");
break;
}else if(j>i){
System.out.println("大了");
}else {
System.out.println("小了");
}
}
}
}