Java 笔记 3:顺序结构,分支结构

流程控制语句结构

值:数据
变量:用来保存/存储值
表达式:
用来计算的
语句:
可以独立执行的,并且是要完成一件事情的。
不是所有的表达式直接加;就可以构成语句的。

流程控制语句结构:
1、顺序结构(每一步都要走,而且从上往下顺着走)
2、分支结构(选择其中一个分支运行)
3、循环结构(重复执行某些语句)

一、顺序结构

整个程序总体来说都是顺序执行的,从main()主方法开始,顺序往下走

比较有代表性:输入和输出

1、输出语句
System.out.println(xx); //输出xx之后换行
System.out.print(xx);//输出xx之后不换行

2、输入语句
步骤:
(1)准备一个数据的扫描仪(对象),指定数据的来源
java.util.Scanner input = new java.util.Scanner(System.in);

回忆:
数据类型 变量名 = 值;

	public static void main(String[] args){
		/*
		(1)java.util.Scanner:是一个扫描仪的类型,是引用数据类型,首字母是大写
		其中java.util是包
		(2)input是一个变量名,它代表这个扫描仪
		(3)new java.util.Scanner(System.in)是给input赋值的,它是一个新的对象
		(4)(System.in)是指定了数据的来源,System.in默认代表键盘输入
		(5)整个语句中,唯一可以自己修改的就是input这个变量名
			如果你把input修改为其他了,那么下面的代码,凡是input的地方就修改为你自己命名的变量名
		*/
		java.util.Scanner input = new java.util.Scanner(System.in);
		
		System.out.print("请输入年龄:");//这个语句在输入之前执行
		/*
		nextInt()是input这个对象的方法,所以Int的I是大写,因为方法名和变量名一样,从第二个单词开始首字母大写
		因为它是方法,所以()不能省略
		*/
		int age = input.nextInt();//从扫描仪中获取一个int的值,赋值给age这个变量
		System.out.println("age = " + age);//输出age变量的值
		
		System.out.print("请输入姓名:");
		String name = input.next();//因为String输入太常用了,所以方法名简化了,没有用nextString
		
		System.out.print("请输入体重:");
		double weight = input.nextDouble();
		
		
		System.out.print("请输入性别:");
		char gender = input.next().charAt(0);//因为输入单个char太少用了,Scanner中没有提供输入单个char的方法,那么我们只能变通,先按字符串接收,然后取第一个字符
	
		System.out.println("姓名:" + name);
		System.out.println("年龄:" + age);
		System.out.println("体重:" + weight);
		System.out.println("性别:" + gender);
	}

二、分支结构

1、条件判断:if…else
2、选择结构:switch…case

(一)条件判断
1、单分支条件判断
2、双分支条件判断
3、多分支条件判断
语法格式:
if(条件表达式1){
当条件表达式1成立时,要执行的语句块1;
}else if(条件表达式2){
当条件表达式1不成立,
当条件表达式2成立时,要执行的语句块2;
}else if(条件表达式3){
当条件表达式1不成立,
当条件表达式2不成立,
当条件表达式3成立时,要执行的语句块3;
}。。。

else{
当以上所有的条件都不成立时,要执行的语句块n+1;
}

说明:
(1)所有条件表达式必须是boolean值
(2)当{}中的语句只有一句时,可以省略{}
不建议省略{}

执行特点:
(1)不管有几个分支,最终只会执行其中的一个
(2)这么多条件表达式是顺序往下判断的,
如果上面有条件成立了,下面的就不看了;
如果上面的条件不成立,才会去看下面条件。
当多个条件的范围是“互斥”(没有重叠部分),顺序可以随意;
当多个条件的范围是“包含”(有重叠部分),顺序不能随意,小的在上,大的在下

二、分支结构
1、条件判断:if…else
2、选择结构:switch…case

(一)条件判断
1、单分支条件判断
2、双分支条件判断
3、多分支条件判断
4、嵌套条件判断

(二)选择结构
语法结构:
switch(表达式){
case 常量值1:
语句块1;
【break;】
case 常量值2:
语句块2;
【break;】

【default:
语句块n+1;
【break;】

}
要求:
(1)case后面必须是常量值
(2)case后面的常量值不能重复
(3)switch()中的表达式的类型有要求:
允许4种基本数据类型:byte,short,int,char
允许2种引用数据类型:枚举(JDK1.5之后)、String(JDK1.7之后)

执行特点:
(1)入口
①当switch()中的表达式的值与某一个case后面的常量值“相等”,就会从这个case进入
②当switch()中的表达式的值与所有的case后面的常量值都“不相等”,就会寻找default进入
(2)出口
①自然出口:switch的结束}
②中断出口:break (或后面要讲的return等)
(3)一旦找到“入口”就会顺序往下执行,直到遇到“出口”
(4)default的位置不一定在最后,习惯上我们写在最后

switch:开关

	public static void main(String[] args){
		//1、输入月份
		java.util.Scanner input = new java.util.Scanner(System.in);
		System.out.print("请输入月份:");
		int month = input.nextInt();
		
		switch(month){
			case 3:
			case 4:
			case 5:
				System.out.println("春季");
				break;
			case 6:
			case 7:
			case 8:
				System.out.println("夏季");
				break;
			case 9:
			case 10:
			case 11:
				System.out.println("秋季");
				break;
			case 12:
			case 1:
			case 2:
				System.out.println("冬季");
				break;
			default:
				System.out.println("输入有误!");
		}
	}
	public static void main(String[] args){
		//1、从键盘分别输入年、月、日
		java.util.Scanner input = new java.util.Scanner(System.in);
		
		System.out.print("年:");
		int year = input.nextInt();
		
		System.out.print("月:");
		int month = input.nextInt();
		
		System.out.print("日:");
		int day = input.nextInt();
		
		//判断这一天是当年的第几天==>从1月1日开始,累加到xx月xx日这一天
		//(1)[1,month-1]个月满月天数
		//(2)第month个月的day天
		//(3)单独考虑2月份是否是29天(依据是看year是否是闰年)
		
		//2、声明一个变量days,用来存储总天数
		//int days = 0;
		//累加第month个月的day天
		//days += day;
		
		//修改上面的代码,直接把days初始化为day
		int days = day;
		
		//3、累加[1,month-1]个月满月天数
		/*
		switch(month){
			//case 1://不需要累加满月天数
			case 2:
				//累加1月的满月天数
				days += 31;
				break;
			case 3:
				//累加1月和2月的满月天数
				days += 31 + 28;
				break;
			case 4:
				//累加1月、2月、3月的满月天数
				days += 31 + 28 + 31;
				break;
			....
		}
		*/
		switch(month){
			case 12:
				//累加的1-11月
				days += 30;//这个30是代表11月份的满月天数
				//这里没有break,继续往下走
			case 11:
				//累加的1-10月
				days += 31;//这个31是代表10月的满月天数
				//这里没有break,继续往下走
			case 10:
				days += 30;//9月
			case 9:
				days += 31;//8月
			case 8:
				days += 31;//7月
			case 7:
				days += 30;//6月
			case 6:
				days += 31;//5月
			case 5:
				days += 30;//4月
			case 4:
				days += 31;//3月
			case 3:
				days += 28;//2月
				//4、在这里考虑是否可能是29天
				if(year%4==0 && year%100!=0 || year%400==0){
					days++;//多加1天
				}
			case 2:
				days += 31;//1月
		}
		
		//5、输出结果
		System.out.println(year + "年" + month + "月" + day + "日是这一年的第" + days + "天");
	}

猜你喜欢

转载自blog.csdn.net/qq_40473204/article/details/107481947