在 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 共分为三步:
- 在 .java 文件中导入 Scanner 工具类;
import java.util.Scanner; - 新建一个 Scanner 类的对象,这里我将对象命名为 scan;
Scanner scan = new Scanner(System.in); - 使用 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
运行效果如下: