5 Java 条件分支语句与循环语句

5.1 概述

  计算机源于生活,程序模拟现实生活,从而服务生活。如下生活例子:

  (1)起床,刷牙,洗脸,吃早餐,上课,回家,睡觉 ----->(顺序)
  (2)如果时间不太够,打个滴滴快车,如果时间够,坐个地铁 ---->(选择)
  (3)撸完这个接口,又撸下一个接口 ----> (循环)

  因此程序的执行流程有:

  • 顺序性
  • 选择性 (if else switch)
  • 循环性 (for do while)

  顺序性就是程序自上往下执行,接下来分别讲解条件分支语句与循环语句。

5.2 if 结构语句 (条件分支语句)

5.2.1 if 语句

  语法结构

	if(关系表达式) {
		基本语句体
	}

执行顺序:首先判断关系表达式的结果是 true 或 false,若为 true,则执行基本语句体;反之不执行。

int i = 10 / 3;
int j = 20 / 4;
if(i > j) {
	System.out.println("i 较大")
}

5.2.2 if else 语句

  语法结构

	if(关系表达式) {
		语句体1;
	} else {
		语句体2;
	}

执行顺序:首先判断关系表达式的结果是 true 或 false,若为 true,则执行语句体1;反之则执行语句体2。如:我们常见的登录,用户输入密码,判断密码正确与否的操作如下:

import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		System.out.println("请输入密码:");
		Scanner sca = new Scanner(System.in);
		String password = sca.next();
		if("123456".equals(password)) {
			System.out.println("登录成功");
		} else {
			System.out.println("用户名或密码错误!");
		}
	}
}

  Scanner 这个是 java.util 包下的一个类,因此需要 import 关键字进行引入,通过 Scanner 类来获取用户的输入。new Scanner(System.in) 是创建一个这个类的对象(之后讲解,先照着写);next() 这个方法获取输入的字符串;equals() 方法是 String 类的方法,作用是比较两个字符串的是否相等(为啥要特意标为蓝色,之后讲解)。

5.2.3 多重 if

  语法结构

	if(关系表达式1) {
		语句体1;
	} else if(关系表达式2){
		语句体2;
	}
	...
	else {
		语句体 n
	}

执行顺序:首先判断关系表达式1的结果是 true 或 false,若为 true,则执行语句体1;反之继续判断关系表达式2,若为 true,则执行语句体2,依此类推。如:输入学生成绩,判断学生成绩等级,90 分以上(包含 90)为 A,80 ~ 90 为 B,70 ~ 80 为 C,60 ~ 70 为 D,其余为 E。

	System.out.println("please input a score:");
	Scanner scanner = new Scanner(System.in);
	int score= scanner.nextInt();
	if(score >= 90) {
		System.out.println("该学生分数等级为:A");
	} else if(score >= 80) {
		System.out.println("该学生分数等级为:B");
	} else if(score >= 70) {
		System.out.println("该学生分数等级为:C");
	} else if(score >= 60) {
		System.out.println("该学生分数等级为:D");
	} else {
		System.out.println("该学生分数等级为:E");
	}

5.2.3 嵌套 if

  语句结构:

if(条件表达式 1) {
	if(条件表达式 2) {
		语句体1;
	} else {
		语句体2;
	}
}

  执行顺序类似上述例子。

5.3 Switch 语句 (条件分支语句)

  语法结构:

switch(表达式) {
	case 值 1 :
		语句体1;
		break;
	case 值 2 :
		语句体 2;
		break;
		...
	default :
		语句体 n;
		break;
}
  • case 后面跟的是要和表达式进行比较的值。
  • break 表示中断,结束的意思,用来结束 switch 语句。
  • default 语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的 else 相似。

    例子:用户输入1 ~ 7 的数字,每个数字对应周几学习什么课程。
       System.out.println("please input a dayNum:");
       Scanner sca = new Scanner(System.in);
       int dayNum = sca.nextInt();
       switch(dayNum) {
           case 1 :
               System.out.println("周一学 Java 基础");break;
           case 2 :
               System.out.println("周二学 SQL");break;
           case 3 :
               System.out.println("周三学 JavaScript");break;
           case 4 :
               System.out.println("周四学恋爱学");break;
           case 5 :
               System.out.println("周五学煮饭");break;
           case 6 :
               System.out.println("周六学刺激战场");break;
           default  :
               System.out.println("周日学王者荣耀");break;
       }

注:

  • case 后面的值不可相同;
  • default 可以忽略写;
  • break 也可以忽略写,不过会继续判断下去,如上述例子,如果 case 1 后没有 break,满足条件后依然会继续判断,直到遇到 break 或执行到最后才结束。
  • 在 jdk1.7 之前,switch 后面的表达式只能支持 byte、short、char、int 这几个基本数据类型和其对应的封装类型。switch 后面的括号里面只能放int类型的值,但由于 byte,short,char 类型,它们会 自动 转换为 int 类型(精精度小的向大的转化),所以它们也支持。对于精度比 int 大的类型,比如 long、float,doulble,不会自动转换为 int,如果想使用,就必须强转为 int,如 (int)float;jdk1.7 后整形,枚举类型,boolean,字符串都可以。

5.4 for (循环语句)

  语法结构:

for(初始化语句; 条件判断语句; 条件控制语句) {
	循环体语句;
}

执行流程:

  • (1)执行初始化语句;
  • (2)执行条件判断语句,如果返回 false,则结束循环;反之第(3)步。
  • (3)执行循环体语句;
  • (4)执行条件控制语句;
  • (5)回到(2)继续。图解如下:
    在这里插入图片描述

    例子:求出 1~10 之间数据之和。
	int sum = 0;
	for(int i = 1; i <= 10; i++) {
		sum += i;
	}
	System.out.println("1~10 之间数据之和为:" + sum);

可自行测试嵌套 if else 语句。

5.5 While(循环语句)

  语法结构:

while(判断条件语句) {
	循环体语句;
	控制条件语句;
}

执行流程:

  • (1)执行条件判断语句,若返回 false,则结束,反之执行第(2)步;
  • (2)执行循环体;
  • (3)执行条件控制语句;
  • (4)回到(1)继续。图解如下:
    在这里插入图片描述

    例子:求出 1~10 之间数据之和。
	int i = 1;
	int sum = 0;
	while (i <= 10) {
		sum += i;
		 i++;
	}
	System.out.println("1~10 之间数据之和为:" + sum);

可自行尝试“输入登录密码,超过 3 次则提示账户锁定,输入成功则直接跳出”

5.6 do While(循环语句)

  语法结构:

   do {
         循环体语句;
         条件控制语句;
    } while(判断条件语句);

执行流程:

  • (1)先执行循环体语句;
  • (2)执行条件控制语句;
  • (3)执行条件判断语句,若返回 false,则结束循环,反之执行第(1)步,图解如下:
    在这里插入图片描述

    例子:求出 1~10 之间数据之和。
	int i = 1;
	int sum = 0;
	do {
		sum += i;
		i++;
	} while(i <= 10);
	System.out.println("1~10 之间数据之和为:" + sum);

5.7 嵌套循环

  打印如下标志:

  *****
  ****
  ***
  **
  *

   for(int i = 0; i < 5; i++) {
       for(int j = 5; j > i; j--) {
           System.out.print("*");
       }
       System.out.println();
   }

  打印如下标志:

  *****
   ****
   ***
    **
    *

   for(int i = 0; i < 5; i++) {
       for(int j = 0; j < i; j++) {
           System.out.print(" ");
       }
       for(int j = 5; j > i; j--) {
           System.out.print("*");
       }
       System.out.println();
   }

  打印九九乘法表:
在这里插入图片描述

   for(int i = 1; i <= 9; i++) {
       for(int j = 1; j <= i; j++) {
           System.out.print(j + " * " + i + " = " + i * j + "\t");
       }
       System.out.println();
   }

5.8 break,continue,return(循环语句)

5.8.1 break

  break 在 switch 中已经讲解,在循环语句中是跳出当前循环。如:打印 1~10 之间的数字,如果中间遇到 3 的倍数则退出循环

   for(int i = 1; i < 10; i++){
       if(i % 3 == 0) {
           break;
       }
       System.out.print(i + “\t”);
   }

  输出结果是:1  2

5.8.2 continue

  在循环语句中用于结束本次循环。如:打印 1~10 之间的数字,如果中间遇到 3 的倍数则跳过不打印,继续打印后面的数据。

   for(int i = 1; i < 10; i++){
       if(i % 3 == 0) {
           continue;
       }
       System.out.print(i + "\t");
   }

  输出结果是:1  2  4  5  7  8

5.8.3 return

  return 语句用于结束当前正在执行的方法,并将控制权返回给调用此方法的方法。其有两种形式:

  • 没有返回值的方法

  不带返回值的 return 语句只能用于返回类型为 void 的方法。在返回类型为 void 的方法中,return 返回语句不是必需的,隐式的 return 发生在方法最后一个语句完成时。main 方法就是这样一个例子。一般情况下,返回类型是 void 的方法使用 return 语句是为了引起方法的强制结束,这种 return 的用法类似于循环结构中的 break 语句的作用。

  • 有返回值的方法
      任何返回类型不是 void 的方法必须返回一个值,而且这个返回值的类型必须和方法的返回类型相同,或者能隐式转化为方法的返回类型。
    public static void main(String[] args) {
        System.out.println("请分别输入要连个要判断大小的数字(空格隔开):");
        Scanner scanner = new Scanner(System.in);
        int num1 = scanner.nextInt();
        int num2 = scanner.nextInt();
        System.out.println("最大值为:" + getMax(num1, num2));
    }

    /**
     * 判断是否为偶数,是返回true
     * @param num1
     * @param num2
     * @return
     */
    public static int getMax(int num1, int num2) {
        return num1 > num2 ? num1 : num2;
    }

可到牛客网做练习。

至此,Java 条件分支语句与循环语句大体了解了,接下来请看《 6 Java 方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章