java基础学习day04(流程控制1)

程序流程控制
1.顺序结构
2.分支结构
3.循环结构

if-else结构(三种结构)
第一种:
if(条件表达式){
执行表达式
}

第二种:

if(条件表达式){
执行表达式1
}else{
执行表达式2
}

第三种:多选一

if(条件表达式){
执行表达式1
}else if(条件表达式){
执行表达式2
}else if(条件表达式){
执行表达式3
}

else{
执行表达式
}

class IfTest{
     
	public static void main(String[] args){
     
		//列子1
		int heartBeats = 78;
		if(heartBeats < 60 || heartBeats > 100){
     
			System.out.println("需要做进一步检测");
		}
			System.out.println("正常");
		
		
		//举例2
		int age = 23;
		if(age < 18){
     
			System.out.println("看动画片");
		}else{
     
			System.out.println("看电影");
		}
		
		//例子3
		if(age < 0){
     
			System.out.println("输入数据非法");
		}else if(age < 18){
     
			System.out.println("少年");
		}else if(age < 35){
     
			System.out.println("青壮年");
		}else if(age < 60){
     
			System.out.println("中年");
		}else if(age < 120){
     
			System.out.println("老年");
		}else{
     
			System.out.println("神仙");
		}
	}
}

如何从键盘获取不同类型的变量:需要使用Scanner类

具体实现步骤:
1.导包:import java.util.Scanner;
2.Scanner的实例化Scanner scan = new Scanner(System.in);
3.调用Scanner类的相关方法,来获取指定类型的变量

对于char型的获取,Scanner没有提供相关的方法,只能获取一个字符串

注意:
需要根据相应的方法,来输入指定类型的值,如果输入的类型与要求的类型不匹配时,会报异常,导致程序终止

import java.util.Scanner; //导包

class ScannerTest{
     
	public static void main(String[] args){
     
	
		Scanner scan = new Scanner(System.in);
		
		System.out.println("请输入年龄");
		int age = scan.nextInt();
		System.out.println(age);
		
		System.out.println("请输入姓名");
	    String name = scan.next();
		System.out.println(name);
		
		System.out.println("请输入你的体重");
	    double weight = scan.nextDouble();
		System.out.println(weight);
		
		System.out.println("你是否相中我了");
	    boolean isLove = scan.nextBoolean();
		System.out.println(isLove);
				
		System.out.println("请输入性别");
	    String gender = scan.next();
		char genderChar = gender.charAt(0); //获取索引为0位置上的字符
		System.out.println(gender);
		
		
		
	}
}

例题1:

参加考试,分属不同,奖励不同。要求 从键盘输入期末成绩并加以判断。

说明:
1.else是可选的
2.对于条件表达式:
(1)如果多个表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句声明在上面还是下面都可以,无所谓
(2)如果多个表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面
(3)如果多个表达式之间有包含关系,通常情况下,需要将范围小的声明在范围大的上面,否则范围小的机会就没机会执行了

import java.util.Scanner;

class IfTest1{
     
	public static void main(String[] args){
     
		Scanner scan = new Scanner(System.in);
		
		System.out.println("请输入期末考试成绩");
		
		int score = scan.nextInt();
		if(score == 100){
     
			System.out.println("奖励一台轿车");
		}else if(score > 80 && score <= 99){
     
			System.out.println("奖励一台手机");
		}else if(score >= 60 && score <= 80){
     
			System.out.println("奖励一台ipad");
		}else{
     
			System.out.println("什么都没有");
		}

例题2:
由键盘输入三个整数分别存入变量num1、num2、num3,对它们进行排序(使用if-else if-else),并且从小到大输出

说明:
1.if-else结构可以嵌套
2.如果if-else结构中的执行语句只有一行时,对应的一对{}可以省略,但是不建议这么做

System.out.println("请输入第一个整数");
         int num1 = scan.nextInt();
		System.out.println("请输入第二个整数");
         int num2 = scan.nextInt();
		System.out.println("请输入第三个整数");
         int num3 = scan.nextInt();
		 
		 if(num1 > num2){
     
			 if(num3 > num1){
     
				System.out.println(num2 + "," + num1 + "," + num3); 
			 }else if(num3 <= num2){
     
				System.out.println(num3 + "," + num2 + "," + num1);
			 }else{
     
				 System.out.println(num2 + "," + num3 + "," + num1);
			 }
		 }else{
     
			 if(num3 > num2){
     
				 System.out.println(num1 + "," + num2 + "," + num3);
			 }else if(num3 < num1){
     
				 System.out.println(num3 + "," + num1 + "," + num2);
			 }else{
     
				 System.out.println(num1 + "," + num3 + "," + num2);
			 }
		 }

分支结构之二 Switch-case
表达式:
Switch(表达式){
case 常量1:
执行语句1;
//break;
case 常量2:
执行语句2;
//break;

default:
执行语句n;
//break;
}

说明:
1.根据switch表达式中的值,依次匹配我们各个case的常量,一旦匹配成功则进入相应case中的执行语句,当调用完执行语句以后则仍然向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构末尾结束为止
2.break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构
3.switch结构中的表达式,只能是如下的六种数据类型之一:分别是byte、short、char、int、枚举类型(jdk5.0新增)、String类型(jdk7.0新增)
4.case之后只能声明常量,不能声明范围
5.break关键字是可选的
6,default:相当于if-else中的else,default结构也是可选的,位置也是可选的
7.如果switch-case结构中的多个case的执行语句相同,则可以进行合并

import java.util.Scanner;
class SwitchCaseTest{
     
	public static void main(String[] args){
     
		int num = 2;
		switch(num){
     
			case 0:
				System.out.println("zero");
				break;
			case 1:
				System.out.println("one");
				break;
			case 2:
				System.out.println("two");
				break;
			case 3:
				System.out.println("three");
				break;
			default:
				System.out.println("other");
		}

例题:学生成绩大于60合格,低于60不合格

Scanner scan = new Scanner(System.in);
		
		System.out.println("请输入期末考试成绩");
		int score = scan.nextInt();
		switch(score / 10){
     
			case 0:
			case 1:
			case 2:
			case 3:
			case 4:
			case 5:
				System.out.println("不及格");
				break;
			case 6:
			case 7:
			case 8:
			case 9:
			case 10:
				System.out.println("及格");
				break;
		}
		//更优:score / 60;

例题2:从键盘输入2019年的“年”、“month”和“day”,判断输出输入日期为当年的第几天

System.out.println("输入的年");
		int year = scan.nextInt();
		System.out.println("输入的月");
		int month = scan.nextInt();
		System.out.println("输入的日");
		int day = scan.nextInt();
		
		/*
		int sumDays = 0;
		if(month == 1){
			sumDays = day;
		}else if(month == 2){
			sumDays = 31 + day;
		}
		...
		else(month == 12){
			sumDays=31 + ...
		}
		有数据冗余
		同理:按相同的switch-case写也有这个问题
		*/
		
		
		//倒着写可以避免冗余,不加break
		int sumDays = 0;
		switch(month){
     
			case 12:
				sumDays += 30;
			case 11:
				sumDays += 31;
			case 10:
				sumDays += 30;
			case 9 :
				sumDays += 31;
			case 8:
				sumDays += 31;
			case 7:
				sumDays += 30;
			case 6:
				sumDays += 31;
			case 5:
				sumDays += 30;
			case 4:
				sumDays += 31;
			case 3:
				//判断是否为闰年
				if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
     
					sumDays += 29;
				}else{
     
					sumDays += 28;
				}
			case 2:
				sumDays += 31;
			case 1:
				sumDays += day;
		}
		System.out.println(year + "年" + month + "月" + day + "日是当年的第" + sumDays + "天");		
	}
}

说明:
1.凡是可以使用switch-case的结构都可以转换为if-else,反之不成立。
2.当我们写分支结构时,既可以使用if-else,又可以使用switch-case(同时switch中的表达式的取值情况不太对多)我们优先选择switch-case

你可能感兴趣的:(java核心基础笔记,java)