一、switch语句的穿透效果灵活运用
-
穿透效果:switch语句中,case与1个语句匹配了,如果没有break,会不再与case进行匹配,直接执行后面的表达式。
-
example:
/*
将键盘录入一个月份,判断季节 (利用case穿透)
3,4,5 春季
6,7,8 夏季
9,10,11 秋季
12,1,2 冬季
*/
import java.util.Scanner ;
class Switch{
public static void main(String[] args){
Scanner sc = new Scanner(System.in) ; //创建键盘录入对象
System.out.println("请输入一个数据(1-12):") ; //提示并录入数据
int month = sc.nextInt() ;
switch(month){ //使用switch来判断
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 ;
}
}
}
二、循环结构语句
- for循环:
1). for循环的格式:
for( 初始化语句 ; 条件语句 ; 步长语句(控制体语句) )
{
循环体语句;
}
2). 流程:
1)初始语句给当前循环中的变量赋值:执行一次;
2)接下来执行条件语句,判断条件语句是否成立;
3)如果条件语句结果成立:true,执行3)循环体语句;
4)执行控制体语句++/–,循环了;
5)继续去判断条件语句是否成;
6)成立,继续执行循环体语句…
…
…
当前条件语句不成立,for循环结束!
example1:
for(int x = 0 ; x <= 9 ; x ++){ //循环体语句
System.out.println("helloworld") ; //1次 / 2次 /3..... 10
}
example2:
/*
在控制台打印出所有的水仙花数!
什么是水仙花数:
1)是三位数 可以使用for循环:明确了范围 100-1000(不包含1000)
2)每一个位上的数据的立方相加的结果是该数据本身!
153 = 1*1*1 + 5*5*5 + 3*3*3
3)明确了范围 x >=100 && x<1000
4)每一个位上的数据如何确定
定义三个变量:ge,shi,bai:分别代表个位,十位,白为
int ge = x % 10 ; //求余数 //153 % 10 = 3
int shi = x / 10 % 10 ; // 153 / 10 = 15 % 10 = 5
int bai = x / 10 /10 % 10 // 153 / 10 /10 = 1%10 = 1
在循环中加入判断
如果当前x数据==(ge*ge*ge+shi*shi*shi+bai*bai*bai)
获取到x数据
*/
class ShuiXianHuaShu{
public static void main(String[] args){
System.out.println("开始打印水仙花数...") ;
//水仙花数:已经明确范围:使用for循环
for(int x = 100 ; x < 1000 ; x ++){
//100-1000(不包含)
//定义三个变量:分别代表个位,十位,百位
int ge = x % 10 ;
int shi = x / 10 % 10 ;
int bai = x /10 /10 %10 ;
//进行判断
if(x ==(ge*ge*ge+shi*shi*shi+bai*bai*bai)){
//输出x的值
System.out.println("x:"+x) ;
}
}
System.out.println("水仙花数打印完毕...") ;
}
}
3). 循环+统计:
①. 定义一个统计变量 count 从0开始;
②. 明确范围:for循环;
③. 确定每个位数据;
④. 当满足条件:统计变量++ ;
⑤. 输出统计变量。
example:
//求出所有的水仙花有多少个
class ShuiXianHuaShu{
public static void main(String[] args){
//定义统计变量
int count = 0 ;
//水仙花数确定
for(int x = 100 ; x <=999 ; x ++){
//确定每个位数据
int ge = x % 10 ;
int shi = x /10 % 10 ;
int bai = x /10 /10 % 10 ;
//满足条件
if(x == (ge*ge*ge+shi*shi*shi+bai*bai*bai)){
System.out.println("满足条件的数据是:"+x) ;
//统计变量
count ++ ;
}
}
System.out.println("水仙花数共有"+count+"个") ;
}
}
-
while循环:(while和for循环: 两个循环最大的区别:是否明确循环次数! )
1). while循环的通用格式:初始化语句; while(条件表达式){ 循环体语句 控制体语句; }
2). 执行流程:
初始化语句:给变量进行赋值
当前条件表达式成立,执行循环体语句;
继续控制体语句, 再次执行条件表达式
…
…
当条件表达式不满足条件,while循环结束
3). 注意事项:
while循环在使用的时候,不要忘了控制体语句,否则死循环!
扩展:
死循环:
循环语句没有结束条件---恒成立!
while循环格式(推荐)
for循环格式
for(;;){
循环体语句;
}
灵活使用死循环:当不明确次数,使用while循环
while(true){
//判断
满足条件,退出死循环
break ;
}
4). while和for循环的区别什么?
①. 应用场景的区别:
是否明确循环次数;
如果明确循环次数,优先使用for循环 (开发中经常使用);
当不明确循环的次数,使用while循环;
②. 从格式----(内存角度) :for优于 while;
for循环结束之后,不能够访问到for循环中的变量;
循环结束了, 变量(内存中变量:临时变量)就需要被回收了, 节省内存(栈内存);
③. while循环:由于存在初始化语句是在while外面定义的,所有当前while循环,依然访问到while循环中的变量。
example:
/*
键盘录入数据,玩猜数字游戏
java.lang.Math:数学运算 (存在功能:random():产生随机数)
public static double random():
获取随机数 double [0.0,1.0)
分析:
1)导包: 使用Scanner类 :java.util.Scanner;
2) 产生一个随机数:0-100之间的随机数 Math.random()*100 +1
3)创建键盘录入对象
4)提示并录入数据 (不断录入)
4.1)判断
使用键盘录入的数据和产生的随机数进行比较
如果大了,提示"您录入的数据大了"
如果小了,提示小了
否则,就一致!
*/
import java.util.Scanner ;
class WhileTest2{
public static void main(String[] args){
/* 使用Math类中的random() :数学运算类
double number = Math.random() ; //number >= 0.0 && number< 1.0
System.out.println(number) ; */
/* 获取一个数据:1-100之间的随机数 (int类型)
int number = (int)(Math.random()*100+1);
System.out.println(number) ;
--------------------------------------------*/
//产生一个1-100之间的随机数
int number = (int)(Math.random()*100+1) ;
//统计猜多少次
//定义统计变量
int count = 0 ;
//不知道录入多少次才能猜中,无法明确次数,使用while
while(true){
count ++ ;
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//提示并录入
System.out.println("请输入一个数据(100以内):") ;
int guessNumber = sc.nextInt() ;
//判断
if(guessNumber > number){
System.out.println("您要猜的数据大了...") ;
}else if(guessNumber < number){
System.out.println("您要猜的数据小了...") ;
}else{
System.out.println("恭喜您猜中了,"+count+"次猜中了..") ;
//退出循环
break ; //退出,中断
}
}
}
}
- do_while循环:
1). do_while循环语句的格式:
初始化语句;
do{
循环体语句;
控制体语句;
}while(条件表达式) ;
2). 执行流程:
初始化语句对变量赋值一次;
成立,执行循环体语句—控制体语句;
判断条件表达式是否成立!
…
条件不成立,循环语句结束!
3). do_while循环和for,while最大的区别:即使条件不成立,循环体至少执行一次!
三、for循环嵌套
-
格式:
**for循环嵌套: for(初始化语句1;条件表达式1;控制体语句1){ for(初始化语句2;条件表达式2;控制体语句2){ 循环体 } } 内层循环作为外层的循环体语句!**
-
执行流程:
初始化1先执行,条件表达式1成立,
执行循环:for循环
先执行初始化语句2, 条件表达式2成立.
循环体语句 ---->控制体语句2----条件表达式2是否成立
不满足条件
控制体语句1
example:
/*
99乘法表:
1*1=1
1*2=2 2 * 2 = 4
1*3=3 2 * 3 = 6 3 * 3 = 9
...
1*9=9 .... */
// X :代表任意字符 (转移字符)
// \t :制表符: 相当于在记事本中的缩进效果
// \n :换行
//为了保证数据有效:行和列值:1开始
for(int x = 1 ; x <= 9 ; x++){ //行数
for(int y =1 ; y <=x ; y++){ //变化的列数
System.out.print(x+"*"+y+"="+(y*x)+"\t") ;
}
System.out.println();
}
四、跳转控制语句:break 、continue 、return 。
-
break:表示中断结束的意思,不能单独场景使用。
1). 只能在这两个场景使用:
①. switch语句:遇见break结束;
②. 循环中使用:结束循环语句的。2). 单个循环语句中,嵌套循环中使用(早期的)。
标签语句:给外层循环和内层循环起一个名字:
标签名称:for(xxx){}
break 标签名称;
example:
wc:for(int x = 0 ; x < 5 ; x ++){ //x=0,1,2
nc:for(int y = 0 ; y < 5 ; y++){
if(y == 2){
//break wc ; //结束外层循环
break nc ; //结束内层循环
}
System.out.print("*") ;
}
System.out.println() ;
}
-
continue:结束当前循环,立即下一次循环!不能单独使用,一般都在循环中使用!
-
return 也属于跳转控制语句,结束方法去使用;
一般情况:return需要结合有具体返回值类型的方法使用!return很少单独使用!
return:返回
- 结束方法:1). return;2). System类:System.exit(0);退出java虚拟机,结束main方法。