循环__判断语句
语句结构
- 顺序结构
- 分支结构
- 循环结构
分支结构
- 单if语句
- if-else语句
- 多重if语句
- 嵌套if语句
- switch语句
单if语句
例:
需求:
张三Java成绩大于98分,而且音乐成绩大于80分,老师奖励他苹果;
或者Java成绩等于100分,音乐成绩大于70分,老师也可以奖励他还是苹果。
Java成绩大于98分,而且音乐成绩大于80分
或者
Java成绩等于100分,音乐成绩大于70分
public 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语句体
注意事项:
- 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 (表达式) {
case 值1 :
语句序列;
[break];
case 值2:
语句序列;
[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语句的特点:
- switch语句的表达式可以是变量也可以是常量,可以是如下几种类型
**byte short int char**
JDK5以后可以使用枚举类型 (以后讲解枚举的时候讲解)
JDK7以后可以使用String类型
- case expressions must be constant expressions
case子句的取值必须是常量表达式
Duplicate case
多个case子句的值不能够重复 - defualt子句类似于if语句的else语句,表示一种其他的情况,
可以出现switch语句的任意位置,功能和case子句一模一样
一般放在最后面。 - break子句表示退出swtich语句体,如果case或者default子句没有break语句, 会出现break穿透现象
break穿透现象: 从上至下逐级往下执行,知道碰到break停止。 - 条件表达式的值和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关键字【暂时只能够讲单独使用的情况】
- 单独作为一条语句使用
退出return关键字当前所在的方法 - 结合返回值使用 【方法详细介绍】
例:
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