昨日重点内容回顾
1. 运算符
运算符:连接2个常量或者变量中间的符号! 3 + 4
表达式:使用运算符将常量或者变量连接起来的式子
算术运算符
+ - * / %
关系运算符
== != > >= < <=
自增自减运算符
++ --
逻辑运算符
&& || !
赋值运算符
= += -= *= /= %=
三元运算符
布尔表达式?数值1:数值2;
2. 流程控制语句(顺序结构和分支结构)
if
if(关系表达式){
语句体;
}
if...else
if(关系表达式){
语句体1;
}else{
语句体2;
}
if...else if...else if...else
if(关系表达式1){
语句体1;
}else if(关系表达式2){
语句体2;
}else if(关系表达式3){
语句体3;
}else{
语句体n;
}
3. 数据录入:Scanner类
①导包:
import java.util.Scanner; // 必须放在类的上面
②创建对象:
Scanner sc = new Scanner(System.in);
③接收数据:
int number = sc.nextInt();
今日内容介绍
- IDEA的基本操作(Java的开发的集成工具,使得编写java代码变得更加方便) 【熟悉基本操作即可】
- 分支结构语句:switch语句(难点)
- 循环结构: for while do...while(重点)
1.IDEA工具的基本使用
下载、安装不做说明!破解,稍后说明!
1.1 IDEA项目目录结构说明
* 我们在IDEA工具中创建一个项目(存储我们整个班级以后所编写的所有代码),将每一天的代码放入到一个模块当中去!每一天又会学习很多知识点,每一个知识点我们可以使用一个包来进行区分,这个知识点可能需要写很多案例的代码,那么可以可以在这个包中创建很多类!
1.2 如何在IDEA工具中创建一个项目
点击Finish,IDEA工具可能会提示,由它帮我们创建一个目录(itheima2)【workspace\javase提前创建好的】
1.3 如何创建一个模块
①每天的代码都作为一个模块
②为模块取名字并指定存储的位置
③设置操作
一旦点击OK之后,会在D:\Develop\workspace\javase\itheima2目录下创建一个目录day04_code【模块名称】
1.4 如何创建一个包
1.5 如何创建一个类
问题:我们编写HelloWorld的字节码文件(.class)在何处?
在控制台位置,有提示:
删除类、包
1.6 在已有的项目中创建模块
1.7 如何删除一个模块
此时,这个模块并没有完全删除,需要进入指定的目录,手动删除!
1.8 如何删除一个项目
IDEA工具在使用的过程中,大概占用的内存是1G(出现各种卡顿,说明电脑配置存在问题)
1.9 IDEA快捷键
1.10 如何自定义快捷键呢?
1.11 解决IDEA中搜狗输入框不跟随问题
2. switch结构
- switch格式为?
- 执行流程为?
① switch语句的格式
1. switch语句的格式
switch(被检测的数据){ // 被检测数据一般是一个变量(有值)
case 数值1:
语句体1;
break;
case 数值2:
语句体2;
break;
case 数值3:
语句体3;
break;
......
default:
语句体n;
break;
}
对比if语句来学习switch语句
//if语句: switch语句:
int number = 10; int number =10;
if(number==1){ switch(number){
语句体1; case 1:
}else if(number==2){ 语句体1;
语句体2; break;
}else if(number==10){ case 2:
语句体3; 语句体2;
}else{ break;
语句体n; case 10:
} 语句体3;
break;
default:
语句体n;
break;
② switch语句的执行流程
* 格式:
switch(被检测的数据){ // 被检测数据一般是一个变量(有值)
case 数值1:
语句体1;
break;
case 数值2:
语句体2;
break;
case 数值3:
语句体3;
break;
......
default:
语句体n;
break;
}
* 执行流程:
* 执行被检测数据(它可能是一个表达式) 【当然它还可以是一个变量】
* 然后执行第一个case语句,拿着case的数值与被检测的数据进行匹配:
匹配上了,就执行该case里面的语句体,遇到break就结束switch语句。
未匹配上,就拿着第二个case的数值与被检测数据进行匹配:
匹配上了,就执行该case里面的语句体,遇到break就结束switch语句。
未匹配上,就拿着第三个case的数值与被检测数据进行匹配:
依次类推。。。
* 若所有的case数值都与被检测数据不匹配,那么就执行default里面的语句体,遇到break结束switch语句。
switch语句改写减肥计划案例
/**
需求:键盘录入一个星期数,给出对应的减肥计划
1 星期一 爬山
2 星期二 游泳
3 星期三 跑步
4 星期四 动感单车
5 星期五 跳绳
6 星期六 拳击
7 星期日 好好吃一顿
*/
import java.util.Scanner;
public class Demo01{
public static void main(String[] args){
// 1. 创建键盘录入核心对象
Scanner sc = new Scanner(System.in);
// 2. 给出友好提示
System.out.println("请输入一个星期数:[1-7]");
// 3. 获得用户输入的星期数数字
int week = sc.nextInt();
// 判断
/*
if(week ==1){
System.out.println("爬山");
}else if(week ==2){
System.out.println("游泳");
}else if(week ==3){
System.out.println("跑步");
}else if(week ==4){
System.out.println("动感单车");
}else if(week ==5){
System.out.println("跳绳");
}else if(week ==6){
System.out.println("拳击");
}else if(week ==7){
System.out.println("好好吃一顿");
}else{
System.out.println("您录入的星期数有误!");
}
*/
switch(week){
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 7:
System.out.println("好好吃一顿");
break;
default:
System.out.println("您录入的星期数有误!");
break;
}
}
}
③ switch语句的注意事项
1.switch里面的被检测数据的数据类型只能是: byte short char int 枚举 String
double week = 3;
switch(week){ // week变量的数据类型是double,不符合switch语句的要求,编译报错!
case 1:
System.out.println("爬山");
break;
case 2:
System.out.println("游泳");
break;
default:
System.out.println("您录入的星期数有误!");
break;
}
2.case取值
/*
★ case的值必须是一个常量
*/
int a = 1;
switch(week){
// 编译报错, 需要常量表达式
case a:
System.out.println("爬山");
break;
default:
System.out.println("您录入的星期数有误!");
break;
}
/*
★ case常量值的类型要有被检测数据的类型一致!
*/
String week = "1";
switch(week){
case 1: // 此时,case的值1是一个int类型的,与被检测数据week(字符串)的类型不一致,编译报错!
System.out.println("爬山");
break;
default:
System.out.println("您录入的星期数有误!");
break;
}
3.case后面的值不允许重复
int week = sc.nextInt();switch(week){ case 1: System.out.println("爬山"); break; case 1: // 重复的case值,编译会报错! System.out.println("游泳"); break; case 3: System.out.println("跑步"); break; default: System.out.println("您录入的星期数有误!"); break;}
4.case的穿透
/* 当我们在书写switch语句的时候,忘记书写break语句,那么此时就会发生case穿透现象! */switch(week){ case 1: System.out.println("爬山"); // 此处没有写break语句,会发生case穿透!【下面可能是case语句,也可能是default语句,都会穿透!】 // 穿透case语句,那么它是不做case值的匹配,直接进入下一个穿透的case语句体。 // 结束:要么遇到break,要么就执行到switch语句的末尾 default: System.out.println("您录入的星期数有误!"); break; case 2: System.out.println("游泳"); break;}
5.default的问题
/* default语句不论放在switch语句的哪个位置,它都不会先执行! 它永远先执行第一个case语句! 只有当所有的case值都与被检测数据不匹配才会执行default语句!*/switch(week){ // default语句不会先执行,当case值都不匹配才会执行! default: System.out.println("您录入的星期数有误!"); break; case 1: System.out.println("爬山"); break; case 2: System.out.println("游泳"); break;}/* default语句若放在switch语句的末尾,那么break语句可以省略不写!【default语句里面的break建议写上!】 default语法若不是放在switch语句的末尾,没有写break语句,依旧会发生穿透现象!*/
3. 春夏秋冬 ★
- 需求:一年有12个月,分属于春夏秋冬4个季节,键盘录入一个月份,请用程序实现判断该月份属于哪个季节,并输出。
/* 需求:键入录入一个整数(月份),打印对应的季节 春季:3,4,5 夏季:6,7,8 秋季:9,10,11 冬季:12,1,2*/import java.util.Scanner;public class Demo02{ public static void main(String[] args){ // 1. 创建键盘录入核心对象 Scanner sc = new Scanner(System.in); // 2. 给出友好提示 System.out.println("请输入一个月份:[1-12]"); // 3. 获得用户键盘录入的月份数据使用变量存储 int month = sc.nextInt(); // 判断 /* switch(month){ 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 7: System.out.println("夏季"); break; case 8: System.out.println("夏季"); break; case 9: System.out.println("秋季"); break; case 10: System.out.println("秋季"); break; case 11: System.out.println("秋季"); break; case 12: System.out.println("冬季"); break; case 1: System.out.println("冬季"); break; case 2: System.out.println("冬季"); break; default: System.out.println("您输入的月份有误!"); break; } */ // 使用switch语句的穿透性,改写上面的代码! 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("您输入的月份有误!"); break; } }}
- 10分钟时间练习
- 问题: 选择结构语句, if, switch两种, 该如何选择呢?
* 不管if还是switch语句都是用于判断,属于分支结构!那么我们可以从判断的条件入手!!!!! ★ 判断的条件(关系表达式/被检测数据)如果是一个固定数值范围,那么建议使用switch语句 【星期1-7 月份1-12】 ★ 判断的条件(关系表达式/被检测数据)如果是一个数值区间范围,那么建议使用if语句 【数介于3到6之间】
4. for结构
- for循环的格式为?
- 其执行流程是?
* 总结:【循环的特点:重复执行某个动作,有明确的开始和结束】 1. for循环的格式 格式: for(初始化表达式;条件判断语句;控制语句){ // 循环体; } 解释说明: ①初始化表达式:确定循环的开始 ②条件判断语句:确定循环的结束 ③循环体:不断重复执行的功能! ④控制语句:又称之为步进! 整个循环执行的次数由 ①②④三部分来确定!!! 举例:输出5次 我爱黄焖鸡! for(int i = 1; i <= 5; i++){ System.out.println("我爱黄焖鸡!"); } 当i=1的时候,i的确小于等于5,所以会进入for循环,也就说会执行第一次:System.out.println("我爱黄焖鸡!"); 【1】 然后执行控制语句 i++ 此时i的值就变成了2 接着执行条件判断语句,此时i的值为2,它的确小于等于5,所以再次进入for循环,System.out.println("我爱黄焖鸡!");【2】 然后执行控制语句 i++ 此时i的值就变成了3 接着执行条件判断语句,此时i的值为3,它的确小于等于5,所以再次进入for循环,System.out.println("我爱黄焖鸡!");【3】 然后执行控制语句 i++ 此时i的值就变成了4 接着执行条件判断语句,此时i的值为4,它的确小于等于5,所以再次进入for循环,System.out.println("我爱黄焖鸡!");【4】 然后执行控制语句 i++ 此时i的值就变成了5 接着执行条件判断语句,此时i的值为5,它的确小于等于5,所以再次进入for循环,System.out.println("我爱黄焖鸡!");【5】 然后执行控制语句 i++ 此时i的值就变成了6 接着执行条件判断语句,此时i的值为6,它不再小于等于5,条件判断语句结果为false,结束整个for循环! 2. 执行流程 ① 先执行初始化表达式 ② 执行条件判断语句,如果为true,执行循环体③ ③ 循环体(要重复执行的代码),执行完毕后执行控制语句④ ④ 控制语句(步进),让初始表达式的变量每次的变化多少,然后再次执行条件判断语句② ② 拿着改变后的初始化表达式的变量的值去判断(执行条件判断语句),如果为true,执行循环体③ ..... 直到 条件判断语句的结果为false,它就不再执行循环体,此时整个for循环结束!!! 3. 注意事项 不要在for循环后面的小括号与大括号之间写分号!!!!! for(int i=1;i<=5;i++);{ // 此处多了一个分号,for循环没有循环体!后面的{}是一个独立的代码块! System.out.println("我爱黄焖鸡!"); } 上面的代码与我们预期的结果是不一样的!它压根儿就没有进行循环!!!!
5. 循环(遍历)输出数据 ★
- for循环练习之获取数据1-5和5-1
/** 需求:循环亦称之为遍历 for循环输出 1-10 1 2 3 4 5 6 7 8 9 10 正序! for循环输出 10-1 10 9 8 7 6 5 4 3 2 1 倒序! 之前我们学习for循环知道,它有明确的开始和结束! 正序: 开始:从1 结束:到10 步进:每次+1 倒序: 开始:从10 结束:到1 步进:每次-1*/public class Demo05{ public static void main(String[] args){ // 正序遍历1-10 for(int i=1;i<=10;i++){ System.out.println(i); } System.out.println("================="); // 倒序遍历10-1 for(int i=10;i>=1;i--){ System.out.println(i); } }}
- 7分钟时间练习
6. 求和
- 需求: for循环练习之求1-5的数据和
public class Demo04{ public static void main(String[] args){ // 1. 定义一个变量来存储1-5之间数据累加和,初始化值为0 int sum = 0; // 2. 使用循环遍历出1-5之间的数字 for(int i=1;i<=5;i++){ // 3. 累加求和 //sum = sum + i; // 使用上一次的和与当前的数字相加然后赋值给记录累加求和的变量sum! sum += i; /* 当i = 1: sum += i ====>>> sum = sum + i = 0 + 1 = 1 当i = 2:sum += i ====>>> sum = sum + i = 1 + 2 = 3 当i = 3:sum += i ====>>> sum = sum + i = 3 + 3 = 6 当i = 4:sum += i ====>>> sum = sum + i = 6 + 4 = 10 当i = 5:sum += i ====>>> sum = sum + i = 10 + 5 = 15 */ } // 4. 打印输出求和的数值 System.out.println("1-5之间数据的累加和是:" + sum); } }
- 5分钟时间练习
7. 求偶数和
- 需求:求1-100之间的偶数和,并把求和结果在控制台输出
public class Demo05{ public static void main(String[] args){ // 1. 定义一个变量来存储1-100之间数据累加和,初始化值为0 int sum = 0; // 2. 使用循环遍历出1-100之间的数字 /*for(int i=1;i<=100;i++){ // 判断是否为偶数 if(i%2 == 0){ // 说明此时的数字i它就是一个偶数,累加求和 // 3. 累加求和 //sum = sum + i; // 使用上一次的和与当前的数字相加然后赋值给记录累加求和的变量! sum += i; } }*/ // 第二种方式! for(int i =2;i<=100;i+= 2){ sum += i; } // 4. 打印输出求和的数值 System.out.println("1-5之间数据的累加和是:" + sum); } }
- 5分钟时间练习
8. 水仙花数
- 什么是水仙花数?【获得三位数中(100-999)的所有水仙花数:】
/* 获得所有的水仙花数! 水仙花数是一个三位数(100-999), 其每一位的立方和相加的结果还等于该数本身 例如 153 --> 3 * 3 * 3 + 5 * 5 * 5 + 1 * 1 * 1 = 153 分析: 1.使用for循环获得100-999之间所有的整数(三位数) 2.在循环里面获得当前遍历出来的这个三位数的,个位、十位、百位的数字 以153为例: 个位:对10取模 153%10 ====>>> 3 十位:除以10,然后对10取模 153/10%10 =====>>> 15%10 ====>>> 5 百位:除以100 3.对三位数进行筛选(判断) 个位的³ + 十位的³ + 百位的³ = 这个三位数本身,符合这个添加就输出这个三位数! */public class Demo06{ public static void main(String[] args){ // 1. 使用for循环获得100-999之间所有的整数(三位数) for(int i=100;i<1000;i++){ // 2.分别获得当前这个三位数的个位、十位、百位的数字 int ge = i%10; int shi = i/10%10; int bai = i/100; // 3. 判断 if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i){ // 4.程序能执行到这里,说明这个数字i就是符合条件的数字,打印输出 System.out.println(i); // 153 370 371 407 } } } }
- 10分钟时间练习
9. 统计水仙花数个数 ★
- 需求: 统计水仙花数出现的个数
/* 获得所有的水仙花数的个数 水仙花数是一个三位数(100-999), 其每一位的立方和相加的结果还等于该数本身 例如 153 --> 3 * 3 * 3 + 5 * 5 * 5 + 1 * 1 * 1 = 153 分析: 0.定义一个变量记录水仙花的个数,初始值为0 1.使用for循环获得100-999之间所有的整数(三位数) 2.在循环里面获得当前遍历出来的这个三位数的,个位、十位、百位的数字 以153为例: 个位:对10取模 153%10 ====>>> 3 十位:除以10,然后对10取模 153/10%10 =====>>> 15%10 ====>>> 5 百位:除以100 3.对三位数进行筛选(判断) 个位的3 + 十位的3 + 百位的3 = 这个三位数本身,符合这个条件,让记录水仙花个数的变量+1 */public class Demo07{ public static void main(String[] args){ // 定义一个变量记录水仙花的个数,初始值为0 int count = 0; // 1. 使用for循环获得100-999之间所有的整数(三位数) for(int i=100;i<1000;i++){ // 2.分别获得当前这个三位数的个位、十位、百位的数字 int ge = i%10; int shi = i/10%10; int bai = i/100; // 3. 判断 if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i){ // 4.程序能执行到这里,说明这个数字i就是符合条件的数字,让记录水仙花个数的变量+1 count++; } } // 输出记录所有水仙花数据的变量即可 System.out.println("水仙花的个数为:" + count); } }
- 5分钟时间改进代码
10. while结构
- while循环的格式为?
- 其执行流程是?
1. while循环的格式: 基本格式: while(条件判断语句){ 循环体; } 完整格式: 初始化语句; while(条件判断语句){ 循环体语句; 步进(控制语句); } 2. while循环的执行流程:【与for循环完全一样的!】 先执行初始化语句; 然后执行条件判断语句: 结果为true: 它就会执行循环体语句 执行完循环体语句之后,就会执行步进(条件控制语句) 然后再执行条件判断语句: 如果条件为true,就再执行一次循环体,步进,接着执行条件判断语句,直到条件判断语句为false,它就结束while循环!3. 例如:打印5次 黄焖鸡 int i = 0; while(i<5){ System.out.println("黄焖鸡"); i++; } // 对比for循环 for(int i=0;i<5;i++){ System.out.println("黄焖鸡"); }
11. 珠穆朗玛峰 ★
- 需求:世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度?
/* 需求:世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。 请问,我折叠多少次,可以折成珠穆朗玛峰的高度? 分析: 1. 定义一个变量记录纸张的厚度! 2. 定义一个变量统计最终折叠的次数(这个变量我们有一个专门的名词:计数器) 3. 我们可以使用循环来完成,因为不知道具体需要折叠多少次(循环的次数),我们使用while循环比较合适的! 4. 循环中,每折叠一次,纸张的厚度需要加倍的!只要这个纸张的厚度没有超过珠穆朗玛峰,就一直循环下去! 5. 在循环中,没进入一次,需要让计数器+1 */public class Demo08{ public static void main(String[] args){ // 1.定义一个变量记录纸张的厚度! double paper = 0.1; // 2.定义一个变量统计最终折叠的次数(这个变量我们有一个专门的名词:计数器) int count = 0; // 3.我们可以使用循环来完成,因为不知道具体需要折叠多少次(循环的次数),我们使用while循环比较合适的! while(paper <= 8844430){ // 4. 纸张加倍 paper *= 2; // 5. 让计数器+1 count++; } // 6. 输出折叠的次数 System.out.println("需要折叠:" + count + "次,就可以达到珠穆朗玛峰的高度!"); } }
- 7分钟时间练习
12. do...while结构 [了解]
- 格式:
初始化语句; do { 循环体语句; 条件控制语句; }while(条件判断语句);
- 执行流程:
① 执行初始化语句 ② 执行循环体语句 ③ 执行条件控制语句 ④ 执行条件判断语句,看其结果是true还是false 如果是false,循环结束 如果是true,继续执行循环体、条件控制语句,再执行条件判断语句…… 特点: do..while循环, [无论条件是否满足, 都至少执行一次循环体.] 原因在于: 程序从上到下依次执行
13. 三种循环的区别 ★
- 三种循环的基本格式
1. for循环 for(初始化语句;条件判断语句;条件控制语句){ 循环体语句; } 例如: for(int i=1;i<=5;i++){ System.out.println("我爱黄焖鸡!"); }2. while循环 初始化话语句; while(条件判断语句){ 循环体语句; 条件控制语句; } 例如: int i = 1; while(i<=5){ System.out.println("我爱黄焖鸡!"); i++; } while还有基本格式: while(条件判断语句){ 循环体语句; } 3. do...while循环 初始化语句; do{ 循环体语句; 条件控制语句; }while(条件判断语句); 例如: int i = 1; do{ System.out.println("我爱黄焖鸡!"); i++; }while(i<=5); do...while还有基本格式: do{ 循环体语句; }while(条件判断语句);
- 三种循环的区别
for循环、while循环与do...while循环的区别: do...while循环至少会执行一次循环体!
- for循环和while的区别 [重点掌握]
for循环无法获得里面的变量的值!while循环可以获得里面的变量值!
在没有明确需要循环多少次的时候,优先考虑while循环!
- 死循环(无限循环)的三种格式
for循环: for(;;){ System.out.println("for"); }while循环: while(true){ System.out.println("while"); }do...while循环: do{ System.out.println("do...while"); }while(true);
* 结论:开发中偶尔会使用以下while死循环! 【死循环:了解即可!】 可以使用ctrl+c在命令行中结束死循环!!!!! 以后开发,三种循环,for循环使用是最多的,在不明确循环次数的时候我们会是用while,do...while基本不怎么使用!死循环我们基本上使用的都是while死循环!
14. 跳转控制语句 ★
- break有什么作用?
- break的应用环境是?
* 总结: 直接终止循环!【break可用于循环、switch语句】
我们可以通过break来控制死循环:
while(true){ System.out.println("while"); if(满足特定条件){ break; }}
- continue有什么作用?
- continue的应用环境是?
* 总结: 结束本次循环,进入下一次循环【continue只能在循环当中使用!】