Java基础3-程序流程结构

一、程序流程结构

1、顺序结构

     自上而下

2、条件/选择结构

	场景:需要先判断条件,再决定程序是否执行

实现方式:
(1)if

  1. 简单if结构
  if(条件){
    
    
			//代码块
  }
/*条件:boolean表达式
	   boolean变量,关系表达式,逻辑表达式*/
/*执行顺序:先判断条件,如果条件为true,就执行代码块*/
  1. if…else…
 if(/*条件*/){
    
    
		//代码块1
 }else{
    
    
		//代码块2
 }
/*执行:先判断条件,条件成立,则执行代码块1,
      不成立,则执行代码块2*/

三目运算符: 变量 = boolean表达式?值表达式:值2;

  1. 多重if结构
if(条件1){
    
    
	      //代码1
}else if(条件2){
    
    
		  //代码2
}else if(条件3){
    
    
		  //代码3
}else if(条件4){
    
    
		  //代码4
}else{
    
    
		  //代码5
}
/*执行顺序:先判断条件1,条件成立,则执行代码1
		   条件1不成立,就判断条件2,条件2成立,则执行代码2
		   条件2不成立,就判断条件3,条件3成立,则执行代码3
		   ,,,前面条件都不成立,则执行到else
场景:一个维度连续区间的多路分支*/
  1. 嵌套if结构
if(条件1){
    
    
      if(条件2){
    
    		
	  }else{
    
    
	  }
}else{
    
    	
	  if(条件){
    
    
	  }
}
//场景:多个维度的多路分支

(2)switch

    场景:等值比较
switch(表达式){
    
    
	   case 常量1//代码块1
		    break;
	   case 常量2:
	    	//代码块2
			break;
	   case 常量3//代码块3
			break;
	   defaultbreak;
}
/*执行顺序:先计算表达式的值,
           然后和case后面的常量进行等值比较匹配上则执行其后代码块,碰到break结束。
           都不匹配不上,则执行default。*/
注意事项:
	1、表达式 的结果可以是byte short int char String(jdk1.7+) enum枚举  (没有double,float,long)
	2、case 后面的常量没有顺序,不能重复,数据类型要和表达式的一致
	3、default  其它情况 
		1)只有所有的case都不匹配的才执行。
		2)和case没有先后顺序之分,通常放置在最后。
		3)可以省略
	4、break 跳出switch结构
		省略的话,会引起case穿透。但有时可以利用case穿透简化代码

3、综合项目:if和switch嵌套

练习:

  1. 菜单功能

    欢迎进入xxx系统
     	    1登录 
     		2注册 
     		3退出  
     			 请选择:1
    登录
    
import java.util.Scanner;

public class caidan {
    
    
	public static void main(String[] args) {
    
    
		Scanner input = new Scanner(System.in);
		System.out.println("欢迎进入xxxxxxxxx系统");
		System.out.println("\t1、登录");
		System.out.println("\t2、注册");
		System.out.println("\t3、退出");
		System.out.print("\t\t请选择:");
		int a = input.nextInt();
		switch (a) {
    
    
		case 1:
			System.out.println("登录");
			break;
		case 2:
			System.out.println("注册");
			break;
		case 3:
			System.out.println("退出");
			break;
		default:
			System.out.println("输入错误。");
			break;
		}
	}
}

在这里插入图片描述
2. 学习餐厅发布食谱,周一周三吃米 周二周四吃面,周五周六吃饺子,周日休息

import java.util.Scanner;

public class food {
    
    
	public static void main(String[] args) {
    
    
		Scanner sc = new Scanner(System.in);
		System.out.println("餐厅食谱:\n\t周一、周三吃米饭\n\t周二周四吃面\n\t周五周六吃饺子\n\t周七休息");
		System.out.print("请输入星期几:");
		int week = sc.nextInt();
		switch(week){
    
    
			case 1:
			case 3:
				System.out.println("米饭");
				break;
			case 2:
			case 4:
				System.out.println("面条");
				break;
			case 5:
			case 6:
				System.out.println("饺子");
				break;
			case 7:
				System.out.println("休息");
				break;
			default:
				System.out.println("输入错误");
				break;
		}
	}
}

在这里插入图片描述
3. 根据月份,输出天数

import java.util.Scanner;
public class month {
    
    
	public static void main(String[] args) {
    
    
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入月份:");
		int month = sc.nextInt();
		switch(month){
    
    
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			System.out.println("该月31天。");
		break;
		case 4:
		case 6:
		case 9:
		case 11:
			System.out.println("该月30天。");
			break;
		case 2:
			System.out.println("请输入对应的年份:");
			int year = sc.nextInt();
			if ((year%400 == 0)||(year%4 == 0 && year%100 == 0)) {
    
    
			System.out.println("本年的二月有29天;");
			}else {
    
    
				System.out.println("本年的二月有28天;");
			}
			break;
			default:
			System.out.println("请输入正确的月份!");
			break;
	}
	}
}

在这里插入图片描述

4、循环结构

  1. 场景:有重复做的事情(可以一样的事情,也可以是有规律的事情)
  2. 循环的特点:
  • 循环操作:重复做的事情
  • 循环条件:循环继续的条件;循环结束的条件

(循环结束不了—死循环/程序中要避免死循环)

  1. 实现方式:
    (1)while
while(循环条件){
    
    
		//循环操作
}
/*执行:先判断条件,条件成立,则执行循环操作;
	    循环操作执行结束,会继续判断条件;
	    条件成立,则执行循环操作;...直到循环条件不成立,循环结束
  特点:先判断,后执行
	   如果条件一开始就不成立,循环操作一次都不执行*/

(2)do…while

do{
    
    
	//循环操作
}while(条件);
/*执行:
	先执行一次循环操作,
    判断条件,条件成立,再循环操作
		。。。
    直到条件不成立,循环结束。
特点:先执行,后判断
	 循环操作至少会执行一次*/

(3) for循环

for(1 循环变量的初始化;  2条件 ;  3 循环变量的更新){
    
    
		//4循环操作
}
/*执行:
	  124 324 324 32(条件不成立,循环结束)
  特点:先判断后执行,循环操作有可能一次也不执行
  场景:循环次数固定*/
	
  • 选用循环结构的原则: 循环次数是否固定

  • 固定:优先for

  • 不固定:循环操作是否有可能一次都不执行

  • 如果有可能,那就用while

  • 如果至少会执行一次,优先用do…while
    会执行多次,while、do…while
    (4)双重循环

       一个循环里嵌套了另一个循环外层循环执行一次,内层循环执行一遍
       总共执行次数:外层次数与内层的次数之积
    

    语法:while 、do…while、 for
    break
    跳出所在层的循环
    continue
    结束所在层那一轮循环

5、while练习

  1. 整数反转 123 输出321
import java.util.Scanner;

public class fanzhuan {
    
    
	public static void main(String[] args) {
    
    
		Scanner input = new Scanner(System.in);
		System.out.print("请输入一个整数:");
		int num1 = input.nextInt();
		int yu = 0, num2 = 0;
		while (num1 != 0) {
    
    
			yu = num1 % 10;
			num2 = num2 * 10 + yu;
			num1 = num1 / 10;
		}
		System.out.print("其倒置后的数为:" + num2);
	}
}

在这里插入图片描述

  1. 判断一个整数是不是回文数
import java.util.Scanner;

public class fanzhuan {
    
    
	public static void main(String[] args) {
    
    
		Scanner input = new Scanner(System.in);
		System.out.print("请输入一个整数:");
		int num1 = input.nextInt();
		int a = num1;
		int yu = 0, num2 = 0;
		while (num1 != 0) {
    
    
			yu = num1 % 10;
			num2 = num2 * 10 + yu;
			num1 = num1 / 10;
		}
		System.out.println("其倒置后的数为:" + num2);
		if (a == num2) {
    
    
			System.out.println(num2 + "为回文数字");
		}
	}
}

在这里插入图片描述

break(中断指令)
switch结构中,跳出switch
循环中,跳出循环
continue
只能用在循环中
结束本轮的循环,继续下一轮

6、程序调试

1、编译报错----语法错误
2、运行时报错---看控制台报错,从上往下找第一行自己代码的地方
3、运行结果不对---逻辑问题
	1)借助syso,观察变量的变化
	2)debug:1、分析问题,确定断点(程序会停留的地方)
			  2、启动调试
		      3、单步执行。Step into  F5
					      Step over  F6
		 	  4、观察变量和控制台的变化
			  5、找到问题原因,修改代码

打印图形(外层控制行数,内层控制列数)

12345
12345
12345

*
**
***
****
*****
外层 i [1,5]
内层 j [1,i]

i=1 1   [1,1]
i=2 2	[1,2]
i=3 3 	[1,3]

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

    *
   **
  ***
 ****
*****
外层 i[1,5]
内层	:先打空,再打*,再打换行
空格[1,5-i]      *[1,i]
i=1  4		1
i=2  3		2		
i=3  2		3
i=4  1		4

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

	1
   121
  12321
 1234321
123454321
外层 :i [1,5]
内层 :空[1,5-i]   数字  x[-(i-1),(i-1)]
i=3    1  2  3 2 1 y  y=i-|x|
	  -2 -1  0 1 2 x  x [-(i-1),(i-1)]

		y	i	i
*		1	1	-3
**		2  	2 	-2
***		3 	3  	-1
****	4	4	0
***		3	5	1	
**		2	6	2	
*		1	7	3	
Y=-|x|+4    x=i-4----->y=-|i-4|+4

外层 i[1,7]
内层 j[1,i]&&[1,8-i]
	或j [1,-|i-4|+4]
	
外层i [-3,3]
内层y=-|i|+4

扩展		
		i		空		*
   *	-3		3		1
  **	-2		2		2
 ***	-1		1		3
****	0		0		4
 ***	-1		1		3
  **	-2		2		2
   *	-3		1		1
   
   *	
  ***
 *****
*******
 *****
  ***
   *
 
   
  九九乘法表
  1*1=1
  2*1=2	2*2=4
  3*1=3	3*2=6	3*3=9
  4*1=4 4*2=8	4*3=12	4*4=16
  5*1=5	5*2=10	5*3=15	5*4=20	5*5=25

Guess you like

Origin blog.csdn.net/qq_46645079/article/details/117533541