JavaSE基础——第四章 控制结构

发布于:2025-03-24 ⋅ 阅读:(31) ⋅ 点赞:(0)

本专题主要为观看韩顺平老师《零基础30天学会Java》课程笔记,同时也会阅读其他书籍、学习其他视频课程进行学习笔记总结。如有雷同,不是巧合!

程序运行的流程控制决定程序如何执行,主要有三大流程控制语句:

  • 顺序控制:程序从上到下逐行执行,中间没有任何判断和跳转

  • 分支控制(if else switch):让程序有选择的执行

    • if-else:单分支/双分支/多分支/嵌套分支

      if(条件表达式1) {
      		执行代码块1;
      }
      else if (条件表达式2) {
      		执行代码块2;
      }
      ......
      else {  // else必须紧跟在if或另一个else if之后
      		执行代码块n;
      }
      
    • switch:

      switch(表达式) {   // 只要是表达式就有值
      		case 常量1:   // 表达式的值等于常量
      				语句块1;
      				break;     // 结束switch分支
      		......
      		default:
      				语句块;
      				break;
      }
      

      ⬆️①只要两种类型能相互转换就可以,不需要常量比输入表达式类型更高位;

      ②注意表达式为float/double等类型都不可以;

      ⑤”fall-through”:如果某个case没有break,则会进入下一个case并直接执行其语句块,直到遇到break(即不会判断是否满足下一个case)【允许在一个switch语句中实现多个case共享相同的处理代码,可以在case中不写任何语句块】

  • 循环控制(for, while, do while, 多重循环)

    • for

      for (循环变量初始化; 循环条件; 循环变量迭代) {
      		循环操作语句;
      }
      
      // 循环初始值可以有多条初始化语句,但是类型需要相同,用逗号隔开;循环变量迭代也可以有多条语句
      
      // 循环变量初始化可以在for语句之外,循环变量迭代也可以放在循环操作语句中
      // 但是循环条件两边的分号不能省略:for (; 循环条件;)
      
      for (;;) {...}   // 表示无限循环
      

    • while

      循环变量初始化;
      while (循环条件) {
      		循环体;
      		循环变量迭代;
      }
      
    • do-while

      循环变量初始化;
      do {   // 先执行,后判断,即至少执行一次
      		循环体;
      		循环变量迭代;
      } while (循环条件);
      
    • 多重循环:将一个循环放在另一个循环中,就形成了嵌套循环(内层循环作为外层循环的嵌套体)

      • ⭐例:按金字塔形状输出星星

        import java.util.Scanner;
        
        public class Stars {
        	public static void main (String[] args) {
        		Scanner scanner = new Scanner(System.in);
        		int level;
        		System.out.print("输入层数:");
        		level = scanner.nextInt();
        		int max = 2 * level - 1;
        		
        		int i = 1;
        		while (i <= level) {
        			int star_count = 2 * i - 1;
        			for (int j = 1; j <= (max - star_count) / 2; j++) {
        				System.out.print(" ");
        			}
        			for (int k = 1; k <= star_count; k++) {
        				System.out.print("*");
        			}
        			for (int j = 1; j <= (max - star_count) / 2; j++) {
        				System.out.print(" ");
        			}
        			System.out.print("\n");
        			i++;
        		}
        	}
        }
        

        import java.util.Scanner;
        
        public class Stars {
        	public static void main (String[] args) {
        		Scanner scanner = new Scanner(System.in);
        		int level;
        		System.out.print("输入层数:");
        		level = scanner.nextInt();
        		int max = 2 * level - 1;
        		
        		int i = 1;
        		while (i <= level) {
        			int star_count = 2 * i - 1;
        			for (int j = 1; j <= (max - star_count) / 2; j++) {
        				System.out.print(" ");
        			}
        			for (int k = 1; k <= star_count; k++) {
        				if (i != 1 && i != level) {
        					if (k !=1 && k!= star_count) {
        						System.out.print(" ");
        					}
        					else {
        						System.out.print("*");
        					}
        				}
        				else {
        					System.out.print("*");
        				}
        			}
        			for (int j = 1; j <= (max - star_count) / 2; j++) {
        				System.out.print(" ");
        			}
        			System.out.print("\n");
        			i++;
        		}
        	}
        }
        

      • ⭐例:输出空心菱形

        import java.util.Scanner;
        
        public class Rhombus {
        	public static void main (String[] args) {
        		Scanner scanner = new Scanner(System.in);
        		System.out.print("请输入菱形的层数:");
        		int level = scanner.nextInt();
        
        		if (level % 2 == 0) 
        			System.out.println("层数有误!");
        		else {
        			int half = (level - 1) / 2 + 1;
        			int max = half * 2 - 1;
        			// 上半部分三角
        			for (int i = 1; i <= half; i++) {
        				for (int j = 1; j <= (max - (2 * i - 1)) / 2; j++) {
        					System.out.print(" ");
        				}
        				for (int j = 1; j <= 2 * i - 1; j++) {
        					if (j == 1 || j == 2 * i - 1)
        						System.out.print("*");
        					else
        						System.out.print(" ");
        				}
        				for (int j = 1; j <= (max - (2 * i - 1)) / 2; j++) {
        					System.out.print(" ");
        				}
        				System.out.print("\n");
        			}
        			// 下半部分三角
        			for (int i = half - 1; i >= 1; i--) {
        				for (int j = 1; j <= (max - (2 * i - 1)) / 2; j++) {
        					System.out.print(" ");
        				}
        				for (int j = 1; j <= 2 * i - 1; j++) {
        					if (j == 1 || j == 2 * i - 1)
        						System.out.print("*");
        					else
        						System.out.print(" ");
        				}
        				for (int j = 1; j <= (max - (2 * i - 1)) / 2; j++) {
        					System.out.print(" ");
        				}
        				System.out.print("\n");
        			}
        		}
        	}
        }
        

    • 跳转控制—break:当某个条件满足时终止循环。当出现在多层嵌套的语句块中,可以通过标签(由程序员命名)指明要终止的是哪层语句块,实际开发中最好不要使用。

      label1:
      for (...) {
      		label2: 
      		for (...) {
      				if (...) {
      						break label1;
      				}
      		}
      }
      

      ⭐比较两个字符串是否值相等:if (”Cherry”.equals(name)) {…},可以避免空指针问题

    • 跳转控制—continue:结束本次循环,继续执行下一次循环;在多层嵌套中也可以通过标签指明跳过的循环。

    • 跳转控制—return:跳出所在方法,如果在main方法中,则会退出程序。


网站公告

今日签到

点亮在社区的每一天
去签到