分支结构
1. switch
语法:
switch(变量|表达式){
case 值1:
逻辑代码1;
case 值2:
逻辑代码2;
case 值n:
逻辑代码n;
default:
未满足时的逻辑代码;
}可判断的类型:
byte、short、int、char、String(JDK7+)枚举
执行流程:
如果变量中的值等于值1,则执行逻辑代码1。
如果变量中的值等于值2,则执行逻辑代码2。
如果变量中的值等于值n,则执行逻辑代码n。
如果变量中的值没有匹配的case值时,执行default中的逻辑代码。注意:所有case的取值不可相同。
1.default根据需要可写可不写
2.default的位置不固定
3.break根据需求是否书写,如果需要每个分支相互独立,就加上,否则不需要
1.1 用法1
switch分支结构
switch:开关
case:情况
支持的数据类型:byte short int char String(JDK7+) 枚举
需求:根据名次进行奖励
第1名:奖励夏令营一天
第2名:奖励苹果12袋
第3名:奖励笔记本一本
第4名:口头表扬一次
其他:继续加油
package com.qfedu.test1;
import java.util.Scanner;
/**
* switch分支结构
* switch:开关
* case:情况
* 支持的数据类型:byte short int char String(JDK7+) 枚举
*
* 需求:根据名次进行奖励
* 第1名:奖励夏令营一天
* 第2名:奖励苹果12袋
* 第3名:奖励笔记本一本
* 第4名:口头表扬一次
* 其他:继续加油
* @author WHD
*
*/
public class Test1 {
public static void main(String [] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入您的名次");
int num = input.nextInt();
// if(num == 1) {
// System.out.println("奖励夏令营一天");
// }else if(num == 2) {
// System.out.println("奖励苹果12袋");
// }else if(num == 3) {
// System.out.println("奖励笔记本1本");
// }else if(num == 4) {
// System.out.println("奖励口头表扬一次");
// }else {
// System.out.println("继续加油");
// }
System.out.println("-----------------------------------------");
switch(num) {
case 1:
System.out.println("奖励夏令营一天");
break;
case 2:
System.out.println("奖励苹果12袋");
break;
case 3:
System.out.println("奖励笔记本1本");
break;
case 4:
System.out.println("奖励口头表扬一次");
break;
default:
System.out.println("继续加油");
break;
}
System.out.println("程序结束");
}
}
1.2 用法2
switch的其他用法
需求:
前三名:都可以获得夏令营
第四名:口头表扬一次
其他:继续加油
package com.qfedu.test2;
import java.util.Scanner;
/**
* switch分支结构
* switch:开关
* case:情况
* 支持的数据类型:byte short int char String(JDK7+) 枚举
*
* switch的其他用法
* 需求:
* 前三名:都可以获得夏令营
* 第四名:口头表扬一次
* 其他:继续加油
* @author WHD
*
*/
public class Test1 {
public static void main(String [] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入您的名次");
int num = input.nextInt();
// if(num == 1 || num == 2 || num == 3) {
// System.out.println("奖励夏令营一天");
// }
switch(num) {
case 1:
case 2:
case 3:
System.out.println("奖励夏令营一天");
break;
case 4:
System.out.println("奖励口头表扬一次");
break;
default:
System.out.println("继续加油");
break;
}
System.out.println("程序结束");
}
}
1.3 用法3
switch的其他类型的使用
char类型支持三种方式的赋值作为case之后的内容
package com.qfedu.test2;
import java.util.Scanner;
/**
* switch分支结构
* switch:开关
* case:情况
* 支持的数据类型:byte short int char String(JDK7+) 枚举
*
* switch的其他类型的使用
*
* @author WHD
*
*/
public class Test2 {
public static void main(String [] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入您的名次");
int num = input.nextInt();
byte b1 = (byte)num;
short s1 = b1;
char ch1 = (char)s1;
char ch2 = 'C';
String str = "E";
switch(str) {
case "A":
case "B":
case "C":
System.out.println("奖励夏令营一天");
break;
case "D":
System.out.println("奖励口头表扬一次");
break;
default:
System.out.println("继续加油");
break;
}
System.out.println("程序结束");
}
}
2. 局部变量
局部变量 | 描述 |
---|---|
定义位置 | 在方法体内部 |
作用范围 | 离当前变量最近的大括号以内 |
重名问题 | 重合的作用范围不能重名 |
初始值 | 没有初始值,未赋值不能使用 |
存储位置(了解) | 基本数据类型存在栈(stack)中,引用数据类型名字在栈,值在堆(heap) |
生命周期(了解) | 随着方法的入栈(压栈)而生效,随着方法的出栈(弹栈)而死亡 |
package com.qfedu.test3;
/**
* 局部变量
* 定义位置:在方法体内部
* 作用范围:定义行开始到所在的代码块结束。(离当前变量最近的大括号以内)
* 重名问题:重合的作用范围不能重名,不重合是可以重名的
* 初始值:未赋值不能使用
* @author WHD
*
*/
public class Test1 {
public static void main(String[] args) {
int a = 20;
int b;
b = 33;
System.out.println(b);
System.out.println(a);
String name = "赵四";
if(name.equals("广坤")) {
// int a = 55; 不能重复定义
// int b = 66; 不能重复定义
int c = 77;
System.out.println(a);
System.out.println(c);
}else {
int c = 88;
System.out.println(a + b);
System.out.println(c);
}
}
}
循环结构
循环用于处理重复的操作,提高代码的可读性,可维护性,可扩展性
1.while循环
语法:
while ( 循环条件/布尔类型表达式 ) {
循环操作
}while:当……
循环的必要条件:任何循环都需要一下四个必不可少的条件
- 1.计数器初始化
- 2.判断条件
- 3.循环体
- 4.计数器变化
while循环可以用于处理循环次数确定和不确定的情况,通常用来处理循环次数不确定的情况
因为循环次数确定 有更简洁的循环结构实现 for
package com.qfedu.test4;
/**
* 使用while循环实现打印100遍好好学习
*
* while:当……
* 循环的必要条件:任何循环都需要一下四个必不可少的条件
* 1.计数器初始化
* 2.判断条件
* 3.循环体
* 4.计数器变化
* @author WHD
*
*/
public class Test2 {
public static void main(String[] args) {
// 计数器初始化
int i = 1;
// 判断条件
while(i <= 10000) {
// 循环体
System.out.println("第"+ i +"遍好好学习");
// 计数器变化
i++;
}
}
}
使用while循环实现如下需求:
老师每天检查赵四的学习任务是否合格,如果不合格,则继续进行。
老师给赵四安排的每天的学习任务为:
上午阅读教材,学习理论部分,
下午上机编程,掌握代码部分
package com.qfedu.test4;
import java.util.Scanner;
/**
* 使用while循环实现如下需求:
* 老师每天检查赵四的学习任务是否合格,如果不合格,则继续进行。
* 老师给赵四安排的每天的学习任务为:
* 上午阅读教材,学习理论部分,
* 下午上机编程,掌握代码部分
*
* while循环可以用于处理循环次数确定和不确定的情况,通常用来处理循环次数不确定的情况
* 因为循环次数确定 有更简洁的循环结构实现 for
* @author WHD
*
*/
public class Test3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入今天的学习任务是否合格?y/n");
String answer = input.next();
// if(answer.equals("y")) {
// System.out.println("恭喜你,完成任务");
// }else {
// System.out.println("上午阅读教材,学习理论部分");
// System.out.println("下午上机编程,掌握代码部分");
// }
while(answer.equals("n")) {
System.out.println("上午阅读教材,学习理论部分");
System.out.println("下午上机编程,掌握代码部分");
System.out.println("请输入今天的学习任务是否合格?y/n");
answer = input.next();
}
System.out.println("恭喜你,完成任务");
}
}
2.do-while循环
do {
循环操作
} while ( 循环条件 );
do-while:做……当
do-while先执行,后判断
while和do-while的区别:
while循环是先判断,后执行,如果条件不成立,一次都不执行
do-while先执行,后判断,不管条件是否成立,至少执行一次
do-while也可以用于处理循环次数确定和不确定的情况,通常用于处理循环次数不确定的情况
因为 循环次数确定for循环更为简洁
package com.qfedu.test5;
import java.util.Scanner;
/**
* do-while:做……当
* do-while先执行,后判断
*
* 需求:经过几天的学习,老师给赵四一道测试题,
* 让他先上机编写程序完成,然后老师检查是否合格。如果不合格,则继续编写……
*
* while和do-while的区别:
* while循环是先判断,后执行,如果条件不成立,一次都不执行
* do-while先执行,后判断,不管条件是否成立,至少执行一次
* @author WHD
*
*/
public class Test1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String answer;
do {
System.out.println("编写代码完成上机测试……");
System.out.println("请输入学习成绩是否合格 ?y/n");
answer = input.next();
}while(answer.equals("n"));
System.out.println("恭喜完成任务");
}
}
使用do-while实现打印100遍好好学习
package com.qfedu.test5;
/**
* 使用do-while实现打印100遍好好学习
*
* do-while也可以用于处理循环次数确定和不确定的情况,通常用于处理循环次数不确定的情况
* 因为 循环次数确定for循环更为简洁
* @author WHD
*
*/
public class Test2 {
public static void main(String[] args) {
int i = 1;
do {
System.out.println("第"+ i +"遍好好学习");
i++;
}while(i <= 1000);
}
}
3. for循环
for(int i=0;i<100;i++){
System.out.println(“好好学习!”);
}执行顺序:
第一轮:
1.计数器初始化(只执行一次)
2.判断条件
3.循环体
4.计数器变换
第二轮:
直接从第2步开始
package com.qfedu.test6;
import java.util.Scanner;
/**
* 循环输入某同学结业考试的5门课成绩,并计算平均分
* @author WHD
*
*/
public class Test2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入名字");
String name = input.next();
double sum = 0;
for(int i = 1;i <= 5;i++) {
System.out.println("请输入第"+ i +"门成绩");
double score = input.nextDouble();
sum += score;// sum = sum + score;
}
System.out.println(name + "的总分数是" + sum + ",平均分是:" + (sum / 5));
input.close(); // 关闭input流
}
}
4.for循环特殊写法
- for循环常见问题1 : 缺少计数器定义(alt + enter)
package com.qfedu.test7;
/**
* for循环常见问题1 : 缺少计数器定义
* @author WHD
*
*/
public class Test2 {
public static void main(String[] args) {
int i = 0;
for(;i < 10;i++) {
System.out.println(i);
}
}
}
- for循环常见问题2 : 缺少循环条件
package com.qfedu.test7;
/**
* for循环常见问题2 : 缺少循环条件
* @author WHD
*
*/
public class Test3 {
public static void main(String[] args) {
for(int i = 0; ;i++) {
System.out.println(i);
}
}
}
- for循环常见问题3:缺少计数器变化
package com.qfedu.test7;
/**
* for循环常见问题3:缺少计数器变化
* @author WHD
*
*/
public class Test4 {
public static void main(String[] args) {
for (int i = 0; i < 10; ) {
System.out.println(i);
}
}
}
- for循环常见问题4:for循环中三段代码都不写 死循环
package com.qfedu.test7;
/**
* for循环常见问题4:for循环中三段代码都不写 死循环
* @author WHD
*
*/
public class Test5 {
public static void main(String[] args) {
for(;;) {
System.out.println("hello");
}
}
}
5. 三种循环区别
区别2:执行顺序
while 循环:先判断,再执行
do-while循环:先执行,再判断
for循环:先判断,再执行
区别:适用情况
循环次数确定的情况,通常选用for循环
循环次数不确定的情况,通常选用while或do-while循环
循环结构
1. break
使用场景:可以用于switch或者循环中,分别表示跳出switch结构或者中断循环,没有执行完的循环次数不再执行
package com.qfedu.test1;
/**
* break关键字
* 使用场景:可以用于switch或者循环中,分别表示跳出switch结构或者中断循环
*
* 使用for循环实现跑10圈 当跑到第8圈 太累了 跑不动了 退出
* @author WHD
*
*/
public class Test1 {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println("跑步第" + i + "圈");
if(i == 8) {
System.out.println("太累了,退出");
break; // break将中断循环 所以不能将逻辑代码写在break之后
}
}
System.out.println("程序结束");
}
}
2.课堂练习
2.1
循环录入某学生5门课的成绩并计算平均分,如果某分数录入为负,停止录入并提示录入错误
package com.qfedu.test2;
import java.util.Scanner;
/**
* 循环录入某学生5门课的成绩并计算平均分,
* 如果某分数录入为负,停止录入并提示录入错误
* @author WHD
*
*/
public class Test1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入您的名称");
String name = input.next();
double sum = 0;
boolean flag = true;
for(int i = 1;i <= 5;i++) {
System.out.println("请输入第"+ i +"门成绩");
double score = input.nextDouble();
if(score < 0) {
flag = false;
System.out.println("分数录入错误,不能小于0");
break;
}
sum += score;
}
if(flag) {// 判断一个布尔类型的变量是否为true 可以直接写变量 等同于 flag == true
System.out.println(name + "平均分是" + sum / 5);
}else {
System.out.println("分数录入有误,不再计算平均分");
}
}
}
2.2
1~10之间的整数相加,得到累加值大于20的当前数
package com.qfedu.test2;
/**
* 1~10之间的整数相加,得到累加值大于20的当前数
* @author WHD
*
*/
public class Test2 {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 10; i++) {
sum += i;
if(sum > 20) {
System.out.println("累计值大于20,跳出循环");
break;
}
}
System.out.println("大于20的总和数值为:" + sum);
}
}
3. continue
continue:继续……
continue只能用在循环中,表示跳出本次循环,继续执行下一次循环
break和continue的区别?break可以用于switch或者循环中,continue只能用在循环中
break在循环中表示中断循环,未执行的循环次数不再执行;continue跳出本次循环,继续执行下一次循环
package com.qfedu.test3;
import java.util.Scanner;
/**
* continue:继续……
* continue只能用在循环中,表示跳出本次循环,继续执行下一次循环
*
* 循环录入Java课的学生成绩,统计分数大于等于80分的学生比例
*
* break和continue的区别?
* break可以用于switch或者循环中,continue只能用在循环中
* break在循环中表示中断循环,未执行的循环次数不再执行;continue跳出本次循环,继续执行下一次循环
* @author WHD
*
*/
public class Test1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入班级总人数");
int count = input.nextInt();
double sum = 0; // 用于累计大于等于80的人数
for(int i = 1;i <= count;i++) {
System.out.println("请输入第"+ i +"人的成绩");
int score = input.nextInt();
if(score < 80) {
System.out.println("分数小于80分,不进行累计");
continue;
}
sum++;
System.out.println("***********分数大于等于80分,进行累计***********");
}
System.out.println("大于等于80分的总人数是:" + sum + "占比是" + sum / count * 100 + "%");
}
}
4. 双重循环
4.1 打印图案
当我们使用多重循环打印图案:
- 外层循环控制行数
- 内层循环控制列数
打印三角形:第一行元素的个数决定了计数器的初始值
- 如果元素个数越来越多,那么就++,此时我们必须设置一个上限,也就是必须小于或者小于等于某个值
- 如果元素个数越来越少,那么就–,此时我们必须设置一个下限,也就是必须大于或者大于等于某个值
package com.qfedu.test5;
/**
* 打印平行四边形
*
* 打印三角形:第一行元素的个数决定了计数器的初始值
* 如果元素个数越来越多,那么就++,此时我们必须设置一个上限,也就是必须小于或者小于等于某个值
* 如果元素个数越来越少,那么就--,此时我们必须设置一个下限,也就是必须大于或者大于等于某个值
* @author WHD
*
*/
public class Test3 {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) { // 外层循环
// 左半部分
for(int j =5;j >= i;j--) {
System.out.print("&");
}
// 右半部分
for(int j = 1;j <= 5;j++) {
System.out.print("*");
}
// 换行
System.out.println();
}
}
}
package com.qfedu.test6;
/**
* 使用多重循环打印正三角形
* @author WHD
*
*/
public class Test1 {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
// 左半部分
for (int j = 5; j >= i; j--) {
System.out.print(" ");
}
// 右半部分
for(int j = 1;j <= 2 * i -1;j++) {
System.out.print("*");
}
// 换行
System.out.println();
}
}
}
4.2 双重循环练习
打印银行菜单
package com.qfedu.test6;
import java.util.Scanner;
/**
* 使用switch、do-while实现银行菜单打印
* @author WHD
*
*/
public class Test3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int choice;
do {
System.out.println("===========欢迎使用ATM银行系统===========");
System.out.println("1.存款 2.取款 3.开户 4.修改密码 5.转账 6.查询 0.退出");
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;
case 6:
System.out.println("执行查询余额功能");
break;
case 0:
System.out.println("退出");
break;
default:
System.out.println("输入错误,请重新输入");
break;
}
}while(choice != 0);
System.out.println("程序结束");
}
}
打印乘法表
package com.qfedu.test6;
/**
* 使用双重循环打印乘法表
* @author WHD
*
*/
public class Test2 {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + i * j + "\t");
}
System.out.println();
}
}
}