【Java 语法篇】选择、循环结构语句详解

151 阅读4分钟

在 Java 开发语言中,任何复杂的程序逻辑都可以通过 顺序结构选择结构循环结构 这三种结构来实现。

一、顺序结构

顺序结构顾名思义就是程序从上往下逐行执行,每一句都会被执行。只要该程序不是选择和循环语句,那么它就是顺序结构语句:

public static void main(String[] args) {
    //一句一句往下执行
    int a=5,b=5;
    //被使用
    int c=a++; //运算符在后,先使用a的值赋给c,然后a再自增
    int d=++b; //运算符在前,先将b自增,然后将结果b+1赋值给d
    System.out.println(a); //6(到这步时a、b均已经完成了自增操作)
    System.out.println(b); //6
    System.out.println(c); //5
    System.out.println(d); //6
}

1234567891011

二、选择结构

在实际的业务逻辑中,并非每一句代码都得被执行,选择结构用于 有条件的执行 某语句,执行一次后结束。基于某一个条件,满足此条件后才会去执行某一段代码。选择结构有以下四种:

2.1 if

if 基本语法结构如下,首先判断小括号中表达式的值为 true 还是 false,为 true 则执行下面的语句块,语句块执行完成后结束。为 false 则直接结束。

if(表达式){
  语句块
}

123

如下小案例,定义一个价格,当价格大于等于 500 时,打八折处理。如果小于 500,则输出的是原价。

//当价格超过500时打八折处理
public static void main(String[] args) {
    double price = 800;
    if(price>=500){
        price = price*0.8;
    }
    System.out.println("您共需支付:"+price+"¥"); //您共需支付:640.0¥
}

12345678

2.2 if…else

if...else 基本语法结构如下,就是在 if 的基础上增加了一个语句块选择项。首先判断小括号中表达式的值为 true 还是 false,为 true 则执行下面的语句块 1,为 false 则执行语句块 2,执行完成后结束。

if(表达式){
  语句块1
}else{
  语句块2
}

12345

如下小案例,判断一个数是奇数还是偶数。

public static void main(String[] args) {
    int num = 3;
    if(num%2==0){
        System.out.println(num+"是偶数"); //不执行
    }else{
        System.out.println(num+"是奇数"); //3是奇数
    }
}

12345678

2.3 if…else if

if...else if 基本语法结构如下,可以理解为若干组 if…else 的结合体,它可以进行多组条件的判断。哪一个表达式为 true 就执行对应的语句块,且执行完该语句块后直接结束,不再执行后边的语句。

if(表达式1){
  语句块1
}else if(表达式2){
  语句块2
}else if(表达式n){
  语句块n
}

1234567

如下案例,成绩等级判定; (Scanner 工具使用方法参见本文末尾)

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in); //创建Scanner
    System.out.println("请输入你的成绩:");
    double score = scan.nextDouble();

    if(score<0 || score>100){
        System.out.println("成绩无效,请输入0-100之间的数!");
    }else if(score>=90){ //A优秀 >=90
        System.out.println("你的成绩为:A-优秀");
    }else if(score>=80){ //B良好 80-90
        System.out.println("你的成绩为:B-良好");
    }else if(score>=60){ //C中等 60-80
        System.out.println("你的成绩为:C-中等");
    }else{ //D不及格 <60
        System.out.println("你的成绩为:D-不及格");
    }
}

1234567891011121314151617

2.4 switch…case

switch…case 类似于 if…else if,可以进行多组条件的判断,但是它效率更高且结构清晰,缺点是只能对整数判断相等。基本语法结构如下,表达式的值为几则执行相应的语句。

switch(表达式){
  case 表达式的值1: //该值必须是整数
    语句1;
    break; //跳出switch
  case 表达式的值2:
    语句2;
    break;
  case 表达式的值3:
    语句3;
    break;
  ...
  ...
  case 表达式的值n:
    语句n;
    break;
  default: //当所有case均未被匹配时执行此句
    语句
}

123456789101112131415161718

如下案例:

public static void main(String[] args) {
    int num = 3;
    switch(num){
        case 1:
            System.out.println(111);
            break;
        case 2:
            System.out.println(222);
            break;
        case 3: //表达式num的值为3,所以执行此句
            System.out.println(333); //333
            break;
        default:
            System.out.println("case未被匹配");
    }
}

12345678910111213141516

在使用 switch…case 结构的过程中,应注意以下几点:

  • case 后面的数不能重复;
  • default 语句并不是只可以放到最后,但无论放到哪里都是在所有 case 均未被匹配时才会执行;

三、循环结构

循环结构也是 有条件的执行 某个语句,和选择结构的区别在于循环结构是 多次判断、多次执行 该语句。循环结构包含三要素,缺一不可:

  • 循环变量的初始化;n=0;
  • 循环的条件(以循环变量为基础);n<10;
  • 循环变量的改变。n++;

循环变量指在整个循环中反复改变的那个数。

3.1 while

while 语句的基本语法结构如下,先判断表达式为 true 还是 false,如果为 true 则执行语句块,执行完成之后再返回重新判断表达式,为 true 继续执行语句块,直到表达式为 false 时停止执行。

while(表达式){
  语句块
}

123

如下语句,将同一句话输出五次(注意其中的三要素)。

public static void main(String[] args) {
    //案例:输出5次”我是CSDN博主敬 之!“
    int times = 0; //要素1:循环变量的初始化
    while(times<5){ //要素2:循环的条件
        System.out.println("我是CSDN博主敬 之!");
        times++; //要素3:循环变量的改变
    }
}

12345678

在这里插入图片描述
接下来我们完成一个完整的案例:猜数字小游戏!

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);

    //案例:猜数字小游戏!
    int num = 105; //真正的数字-num
    System.out.println("输入你猜的数字:");
    int guess = scan.nextInt(); //用户猜的数字-guess
    while(guess!=num){ //如果用户猜的数字不是真正的数字
        if(guess>num){
            System.out.println("猜大了"); //>提示猜大了
        }else{
            System.out.println("猜小了"); //<提示猜小了
        }
        System.out.println("再猜一次:");
        guess = scan.nextInt(); //用户重新输入guess
    }
    System.out.println("恭喜你猜对了!"); //如果不是!==,那么就是猜对了
}

123456789101112131415161718

程序效果如下:

在这里插入图片描述

3.2 do…while

do…while 基本语法结构如下,先执行一次语句块,然后判断表达式为 true 还是 false,为 true 则继续返回执行语句块,直到表达式为 false 时结束。

do{
  语句块
}while(表达式);

123

接下来我们使用 do…while 语法来完成上述的猜数字小游戏!

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);

    //案例:猜数字小游戏!
    int num = 105; //真正的数字-num
    int guess; //用户输入的数字-guess(之所以在此处定义是由于作用域的原因,后期讲解)
    do{
        System.out.println("输入你猜的数字:");
        guess = scan.nextInt(); //用户输入
        if(guess>num){ //做判断
            System.out.println("猜大了");
        }else if(guess<num){
            System.out.println("猜小了");
        }else{
            System.out.println("恭喜你猜对了!");
        }
    }while(guess!=num);
}

123456789101112131415161718

补充:Scanner 工具类使用方法

Scanner 是 Java 语言的一个工具类,本应后期讲解。在这里为了便于更直观的解释分支结构,我们先使用一下 Scanner 接收用户输入的值这一功能,更多内容后期再专门讲述。

使用 Scanner 共分为三步:

  1. 在 .java 文件中导入 Scanner 工具类;import java.util.Scanner;
  2. 新建一个 Scanner 类的对象,这里我将对象命名为 scan;Scanner scan = new Scanner(System.in);
  3. 使用 Scanner 类对象。

如下案例:用 Scanner 接收用户输入的年龄,然后打印。

package YunSuan;
import java.util.Scanner; //1.导入Scanner
public class yunSuan {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in); //2.创建Scanner
        System.out.println("请输入你的年龄:");
        int age = scan.nextInt(); //3.使用,扫描一个整数(int)并赋值给age
        System.out.println("年龄为"+age+"岁");
    }
}

12345678910

运行效果如下:

在这里插入图片描述