小言_互联网的博客

java基礎04

286人阅读  评论(0)

循环__判断语句

语句结构

  • 顺序结构
  • 分支结构
  • 循环结构

分支结构

  • 单if语句
  • if-else语句
  • 多重if语句
  • 嵌套if语句
  • switch语句

单if语句

例:

需求:
   张三Java成绩大于98分,而且音乐成绩大于80分,老师奖励他苹果;
   或者Java成绩等于100分,音乐成绩大于70分,老师也可以奖励他还是苹果。
  
   Java成绩大于98分,而且音乐成绩大于80分
   或者
   Java成绩等于100分,音乐成绩大于70public class IfDemo01 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		
		System.out.print("请输入Java成绩:");
		double javaScore = input.nextDouble();
		System.out.print("请输入Music成绩:");
		double musicScore = input.nextDouble();
		
		/*
		 * Java成绩大于98分,而且音乐成绩大于80分
		 *  或者
		 *  Java成绩等于100分,音乐成绩大于70分
		 */
		/*if (javaScore == 100){
			System.out.println("苹果");
		}*/
		System.out.println((javaScore == 100) ? "苹果" : "");
		
		System.out.println("over");
	}
}

  

针对条件单一的情况可以选择 单if语句

语句格式

if(条件表达式) {

语句体;

}

执行流程:

1.判断条件表达式是否成立

成立

执行语句体

不成立

不做任何处理

注意事项:
1.如果if语句体中只有一条语句,那么大括号可以省略,但是如果有多条语句 {} 必须存在
3.条件表达式必须是boolean类型
4.能够使用三目运算符改进的尽量使用三目运算符。

if-else语句

​ 针对有两种选择方向的情况

格式

if(条件表达式) {						

		语句体1;

		} else {

		语句体2;

		}

执行流程:
 	1.首先执行条件表达式是否成立
 		成立
 			执行语句体1;
  		不成立
  			执行语句体2;

例:

需求: 如果考试成绩 大于 80分奖励 香蕉,否则奖励 香蕉牛奶

public class IfDemo02 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("请输入考试成绩: ");
		double score = input.nextDouble();
		
		/*if (score >= 80) System.out.println("香蕉");
		else System.out.println("香蕉牛奶");*/
		
		System.out.println((score >= 80) ? "香蕉": "香蕉牛奶");
		
		System.out.println("over");
		
	}
}

注意事项:

​ 1.条件表达式必须是boolean类型
2.如果if和else语句中只有一条语句,那么大括号可以省略
3.if-else 也可以使用三目运算符改进,无论什么情况的选择语句,只有语句体中有多条语句,就不能够使用三 目运算符改进
​ 4.能够使用三目运算符编写的就一定能够使用选择语句,反之不成立

多重if语句

		 针对 多个区间的 判断情况
语句格式
  if(条件表达式1) {
  		语句体1;
  } else if(条件表达式2) {
  		语句体2;
  } else if(条件表达式3) {
  		语句体3;
  } ...(条件表达式n) {
 		语句体n;
 } else {
 		语句体n+1;
	}
	

执行流程:
 		1.首先判断条件表达式1是否成立
   				执行语句体1;
  			不成立 
 				继续判断条件表达式2是否成立
  					成立
  						执行语句体2;
  					不成立
  				继续判断.....
  		2.如果全部不成立,执行else语句体
 

注意事项:

  1. if语句和else语句只有一个,并且 else语句也可以没有,但是else if语句可以有多个
    2. 无论有多少个else if语句,只会执行其中的一个 语句体
    3. score > 100 || score < 0 的反条件 score >= 0 && score <= 100
    4. 多重if语句不能够使用三目运算符改进
    5. 如果每一个选择语句体中只有一条语句,那么{} 可以省略

例:

// 思考:老师批改试卷,成绩在90分以上的为优秀,成绩在80-90的为良好,成绩在60-80的为及格,60以下的为差,    该怎么实现呢?

public class IfDemo03 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("请输入成绩: ");
		double score = input.nextDouble();
		
		/*if (score >= 90) {
			System.out.println("A");
		} else if (score >= 80) {
			System.out.println("B");
		} else if (score >= 60) {
			System.out.println("C");
		} else {
			System.out.println("D");
		}*/
		
		// 增加程序的健壮性
		// score > 100 || score < 0 的反条件 score >= 0 && score <= 100
		/*if (score > 100 || score < 0) {
			System.out.println("输入的成绩必须在0~100之间!!!");
		} else if(score >= 90) {
			System.out.println("A");
		} else if (score >= 80) {
			System.out.println("B");
		} else if (score >= 60) {
			System.out.println("C");
		} else {
			System.out.println("D");
		}*/
		
		// 增加程序的可读性 Ctrl + Shift + F 格式化
		if (score > 100 || score < 0)
			System.out.println("输入的成绩必须在0~100之间!!!");
		else if (score >= 90 && score <= 100)
			System.out.println("A");
		else if (score >= 80 && score < 90)
			System.out.println("B");
		else if (score >= 60 && score < 80)
			System.out.println("C");
		else
			System.out.println("D");
		
		
		System.out.println("Over");
	}
}

嵌套if语句

​ 针对 条件有多个并且情况复杂的情况

语句格式: 【没有固定格式,if else else if 里面都可以再放 if else else if

例:

需求: 学校举行运动会,百米赛跑跑入10秒内的学生有资格进决赛,根据性别分别进入男子组和女子组

public class IfDemo04 {
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("请输入比赛成绩: ");
		double seconds = input.nextDouble();
		System.out.print("请输入性别: ");
		String gender = input.next();
		
		if (seconds < 10) {
			System.out.println("niubility!!!");
			if (gender.equals("男")) {
				System.out.println("恭喜进入男子组决赛!");
			} else if (gender.equals("女")) {
				System.out.println("恭喜进入女子组决赛!");
			} else {
				System.out.println("恭喜进入女装大佬组决赛!!!");
			}
		} else {
			System.out.println("恭喜你!!!来年再战.");
		}
		
		System.out.println("over");
		
	}
}

debug调试

步骤:

1.打断点
2.进入Debug模式
3.显示出 BreakPoint Expressions Variable
4.学会使用调试工具进行单步调试

		step over 下一步
  		step return 跳出方法外执行
  		step into 跳进方法执行
  		resume 表示跳到下一个断点继续执行,如果没有下一个断点,就按照程序正常的顺序执行结束
  		terminate 终止调试

" == " 比较不同的类型
基本数据类型: 比的是数值本身是否相等
引用数据类型: 比的是引用变量中保存的地址

 引用数据类型: 比的是引用变量中保存的地址:
 记住一个方法来比较引用类型: equals == (" ")

注意事项:
嵌套if语句要慎用,影响程序的可读性,能够使用三目运算尽量使用三目运算

switch语句

switch (表达式)  {
 		case1 : 
 		语句序列;
 		[break];
 		case2:
 		 语句序列;
		[break] ;
 		     … … …      … …
		[default:
		 默认语句 ;]
 	} 

例:

需求:
电话呼叫案例
欢迎致电中国电信,
查询服务请按1,
宽带业务咨询办理请按2,
手机业务咨询办理请按3,
障碍报修请按4,
投诉业务请按5,
转人工服务请按6,
充值缴费请按7,
政府及企业客户请按8,
无需帮助请按请按0,
控制台输入对应的数字显示对应的服务。
输入有误显示“对不起您的输入有误”

public class SwitchDemo01 {
	public static void main(String[] args) {
		System.out.println("欢迎致电中国电信,\r\n" + 
				" *	查询服务请按1,\r\n" + 
				" *	宽带业务咨询办理请按2,\r\n" + 
				" *	手机业务咨询办理请按3,\r\n" + 
				" *	障碍报修请按4,\r\n" + 
				" *	投诉业务请按5,\r\n" + 
				" *	转人工服务请按6,\r\n" + 
				" *	充值缴费请按7,\r\n" + 
				" *	政府及企业客户请按8,\r\n" + 
				" *	无需帮助请按请按0,\r\n" + 
				" *	控制台输入对应的数字显示对应的服务。\r\n" + 
				" *	输入有误显示“对不起您的输入有误”");
		Scanner input = new Scanner(System.in);
		System.out.print("请输入服务选项: ");
		int choice = input.nextInt();
		switch (choice) {
		
		case 1:
			System.out.println("查询服务");
//			break;
		case 2:
			System.out.println("宽带业务咨询办理");
//			break;
		
		case 3:
			System.out.println("手机业务咨询办理");
			break;
		case 4:
			System.out.println("障碍报修");
			break;
		case 5:
			System.out.println("投诉业务");
			break;
		default:
			System.out.println("对不起,您输入的选项不存在,没有此服务!");
			break;
		
		}
		
		System.out.println("over");
		
		char ch = 'a';
		// if(ch == 97)
		switch (ch) {
		case 97:
			System.out.println("a");
			break;
		case 98:
			System.out.println("b");
			break;

		default:
			break;
		}
	}
}


switch语句的特点:

  1. switch语句的表达式可以是变量也可以是常量,可以是如下几种类型
		**byte short int char** 
		JDK5以后可以使用枚举类型 (以后讲解枚举的时候讲解)
	    JDK7以后可以使用String类型 

  1. case expressions must be constant expressions
    case子句的取值必须是常量表达式
    Duplicate case
    多个case子句的值不能够重复
  2. defualt子句类似于if语句的else语句,表示一种其他的情况,
    可以出现switch语句的任意位置,功能和case子句一模一样
    一般放在最后面。
  3. break子句表示退出swtich语句体,如果case或者default子句没有break语句, 会出现break穿透现象
    break穿透现象: 从上至下逐级往下执行,知道碰到break停止。
  4. 条件表达式的值和case子句的常量值进行匹配过程:
    进行运算的时候如果是 byte short int char进行匹配,
    底层都会转换成 int类型来匹配
    如果类型是 String类型,会进行equals比较

语句选择

​ 1.单if 【条件单一】
2.if-else 【两种情况】
​ 3.多重if 【多种情况】
4.嵌套 【复杂情况】
​ 5.switch 【等值情况】

if语句和switch语句的区别:

   1.能够使用switch一定可以使用if语句,反之不成立
   2.if语句常用于区间判断,switch常用于等值判断
   3.if语句条件是boolean类型,switch是常量表达式【byte short int char 枚举 String】
   4.如果是等值判断,也可以使用多重if,但是switch的可读性更高,所以开发中使用更常见

break应用场景

1.switch 退出switch语句

2.loop 退出循环体
单层循环: 退出循环体
多层循环
break + 标签名
注意: 这里的标签名满足 变量的 命名规范
a.设置标签
b.使用标签
使用 break + 标签名的方式 很少使用,影响了程序的可读性,慎用

例:

打印1到10个数,遇到4的倍数程序自动退出。

public class BreakDemo02 {
	public static void main(String[] args) {
		for (int i = 1; i <= 10; i++) {
			if (i % 4 == 0) {
				break;
			}
			System.out.println(i);
		}
	}
}

continue应用场景:

​ 单层循环: 跳过本次循环,执行下一次循环
【针对for循环,无论continue下面有多少行代码都不会被执行,直接执行控制条件语句】
多层循环
continue + 标签名

例:

老王来学校学习Java,一共有4个阶段,

由于老王大学就学过Java,所以老王就想跳过一阶段从二阶段开始学怎么办呢?

public class ContinueDemo01 {
	public static void main(String[] args) {
		
		/*for (int i = 1; i <= 4; i++) {
			if (i == 1) {
				// break;
				continue;
			}
			System.out.println("正在学习第" + i + "个阶段!!!");
		}
		System.out.println("学完了");*/
		
		outLoop: for (int i = 0; i < 3; i++) {
			innerLoop: for (int j = 0; j < 7; j++) {
				if (j == 3) {
					continue outLoop;
				}
				System.out.print("*");
			}
			System.out.println();
		}
		System.out.println("over");
	}
}


循环

循环的本质: 用来解决代码重复的问题,从而简化代码

public class LoopDemo01 {
	public static void main(String[] args) {
		/*System.out.println("好好学习,天天向上!");
		System.out.println("好好学习,天天向上!");
		System.out.println("好好学习,天天向上!");
		System.out.println("好好学习,天天向上!");
		System.out.println("好好学习,天天向上!");*/
		
		System.out.println("start");
		System.out.println("start");
		System.out.println("start");
		System.out.println("start");
		
		/*for(int i = 1; i <= 10; i++) {
			System.out.println("好好学习,天天向上!" + i);
			System.out.println("good good study day day up " + i);
		}*/
		
		for(int i = 1, j = 10; i <= 10 && j >= 1; i++,j--) {
			System.out.println("好好学习,天天向上!" + i);
			System.out.println("good good study day day up " + j);
		}
		
		System.out.println("over");
		System.out.println("over");
		System.out.println("over");
		
	}
}


循环的格式【循环四要素】:
1.初始化语句
2.循环条件语句 (boolean)
3.循环体语句
4.控制条件语句

循环语句的分类:
1.for循环语句
2.while循环语句
3.do-while循环语句
4.嵌套循环

格式:

 1.初始化语句
  while(2.循环条件语句){
 		3.循环体语句;
  		4.控制条件语句;
 }

for循环

for(1.初始化语句;2.循环条件语句;4.控制条件语句) {
  		3.循环体语句;
  }

do___while循环

1.初始化语句;
  do {
  		3.循环体语句;
  		4.控制条件语句;
  } while(2.循环条件语句);

  while循环可以实现的,for循环可以改进
  但是do-while循环可以实现的,for循环肯定不能改进

do-while和while的区别

两者都是针对循环次数不确定的情况
while是先判断循环条件是否成立,再来执行循环体
而do-while是先执行一次循环体语句,再来判断循环条件是否成立

例:

需求: 考驾照

public class DoWhileLoopDemo01 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		
		double score = 0.0;
		do {
			System.out.println("正在进行科目二驾照考试...");
			// 此代码仅做效果使用,具体学习后面讲解多线程讲解
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("兄弟,你好的如何?");
			score = input.nextDouble();
		} while(score < 90);
		System.out.println("恭喜你,驾照到手!!!");
		
	}
}


循环的执行流程
1.看图

[外链图片转存失败(img-RcUqOFLK-1568552836614)(E:\JavaEE\javaSE\day04\01_课件资料\img\for.png)] 2.debug

​ 可通过debug 调试观察循环运行情况

return关键字【暂时只能够讲单独使用的情况】

  1. 单独作为一条语句使用
    退出return关键字当前所在的方法
  2. 结合返回值使用 【方法详细介绍】

例:

public class ReturnDemo01 {
	public static void main(String[] args) {
		
		return;
		
		/*System.out.println("start");
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 7; j++) {
				if (j == 3) {
					return;
				}
				System.out.print("*");
			}
			System.out.println();
		}
		System.out.println("over");*/
	}
}


while循环

for循环和while循环的区别:

​ for循环的循环变量作用于循环体内,在循环体外循环变量自动销毁

​ while循环的循环变量作用于全局。

​ for循环一般针对循环次数确定的情况下可读性更强

​ while循环一般针对循环次数不确定的情况可读性更强

while循环能够实现的for循环一定可以实现

但是反之不成立

例:

需求: 一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?

public class WhileLoopDemo01 {
	public static void main(String[] args) {
		// 定义统计变量 count
		int count = 0;
		// 定义每次对折后的高度
		// double height = 0.08;
		
		// 对折第一次
		// height *= 2;
		// count ++;
		
		// 对折第二次
		// height *= 2;
		// count ++;
		
		/*while (height <= 8848130) {
			height *= 2;
			count ++;
		}*/
		double height = 0.08;
		for (; height <= 8848130; ) {
			height *= 2;
			count ++;
		}
		
		System.out.println("对折的次数: " + count);
		
	}
}



转载:https://blog.csdn.net/qq_44423114/article/details/100864249
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场