目录
程序流程控制
流程控制语句
java提供了一些流程控制语句,来控制程序的执行流程
分支结构
if分支
根据判断的结果决定执行某个分支的代码
if语句格式1
if (关系表达式) {
语句体;
}
if语句格式2
if (关系表达式) {
语句体1;
} else {
语句体2;
}
if语句格式3
if (关系表达式1) {
语句体1;
} else if (关系表达式2) {
语句体2;
}
…
else {
语句体n+1;
}
switch
匹配条件去执行分支,适合做值匹配的分支选择,结构清晰,格式良好
执行流程
先执行表达式的值,拿值去与case后的值进行匹配
匹配哪个case的值为true就执行哪个case,遇到break就跳出switch分支
如果case后的值都不匹配则执行default代码
格式:
switch(表达式){
case 值1:
执行代码...;
break;
case 值2:
执行代码...;
break;
case 值3:
执行代码...;
break;
...
default:
执行代码n;
}
switch注意
表达式类型只能是byte,short,int,char,JDK5开始支持枚举,JDK7开始支持String,不支持double,float,long
case给出的值不允许重复,且只能是字面量,不能是变量
不要忘记写break,否则会出现穿透现象
switch的穿透性
如果代码执行到没有写break的case块,执行完后将直接进入下一个case块执行代码(而且不会进行任何匹配),直到遇到break才跳出分支,这就是switch的穿透性
当存在多个case分支的功能代码是一样时,可以用穿透性把流程集中到同一处处理,这样可以简化代码。
if与switch
if在功能上强于switch
if适合做区间匹配
switch适合做值匹配的分支选择,代码优雅
循环结构
for循环
控制一段代码反复执行很多次
格式
for(初始化语句;循环条件;迭代语句){
循环体语句(重复执行的代码);
}
案例
求1-5之间的数据和,并把求和结果在控制台输出
package com.cat.test;
public class Test3 {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 5; i++) {
sum += i;
}
System.out.println(sum);
}
}
求1-10之间的奇数和,并把求和结果在控制台输出
方法一:
定义for循环使其能够依次访问1,2,3,4,5,6,7,8,9,10
在for循环中,通过if筛选出奇数
在循环外定义一个整数变量sum来累加这些数据
方法二:
定义for循环使其能够依次访问:1,3,5,7,9
在循环外定义一个整数变量sum来累加这些数据
package com.cat.test;
public class Test3 {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 10; i += 2) {
sum += i;
}
System.out.println(sum);
}
}
水仙花数
需求:在控制台输出所有的“水仙花数”,水仙花数必须满足如下2个要求:
1.水仙花数是一个三位数
2.水仙花数的个位、十位、百位的数字立方和等于原数
package com.cat.test;
public class Test3 {
public static void main(String[] args) {
//在循环外定义一个变量用于记录水仙花的个数
//第一步:定义一个for循环找到所有三位数100-999
//第二步:将每个数据的个位十位百位提取出来
//第三步:用if判断:个位十位百位数字的立方和是否等于原数,等于则输出该数据
int count = 0;
for (int i = 100; i <= 999; i++) {
int g = i % 10;
int s = i / 10 % 10;
int b = i / 100;
int add = g * g * g + s * s * s + b * b * b;
if (add == i) {
System.out.println(i);
count++;
}
}
System.out.println("水仙花个数是:"+count);
}
}
while循环
while循环格式与执行流程
初始化语句;
while(循环条件){
循环体语句(被重复执行的代码);
迭代语句;
}
for与while
功能上是完全一样的,for能解决的while也能解决,反之亦然
使用规范:知道循环几次:使用for;不知道循环几次建议使用:while
案例
折叠珠穆朗玛峰
珠峰高度8848.86米=8848860毫米,有一张足够大的纸,厚度0.1毫米。请问折叠几次,可以折成珠穆朗玛峰的高度
package com.cat.test;
public class Test4 {
public static void main(String[] args) {
//定义比变量存储珠峰和纸的高度
//使用while循环,循环条件是(纸张厚度<山峰高度),内部控制纸张折叠,每折一次,纸张厚度变为原来的两倍,循环外定义计数变量,每次折叠+1
double height = 8848860;
double paper = 0.1;
int count = 0;
while (paper < height) {
paper *= 2;
count++;
}
System.out.println(count);
}
}
do-while循环
先执行再判断循环条件
特点:一定会先执行一次循环体
格式
初始化语句;
do{
循环体语句;
迭代语句;
}while(循环条件);
三种循环区别
for循环和while循环(先判断后执行)
do…while(第一次先执行后判断)
for循环中,控制循环的变量只在循环中可以使用。While循环中,控制循环的变量在循环后还可以继续使用。
全选代码按Ctrl+alt+T能直接放入各种结构
死循环
一直循环下去,如果没有干预不会停止下来
经典写法
while(true){
System.out.println("!");
}
do{
System.out.println("!");
}while(true);
案例
密码验证
package com.cat.test;
import java.util.Scanner;
public class Test5 {
public static void main(String[] args) {
int okpassword = 520;
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请您输入正确的密码:");
int password = sc.nextInt();
if (password == okpassword) {
System.out.println("登录成功");
break;//结束当前所在循环的执行
} else {
System.out.println("密码错误");
}
}
}
}
循环嵌套
特点:外部循环每循环一次,内部循环完全执行完一次
跳转关键字
break:跳出并结束当前所在循环的执行
continue:用于跳出当前循环的当次执行,进入下一次循环
注意:
break只用于结束所在循环,或者结束所在switch分支的执行
continue只能在循环中进行使用。
package com.cat.test;
public class Test7 {
public static void main(String[] args) {
//理解break和continue的作用
//场景:循环五天,但是第三天中途截止
for (int i = 0; i < 5; i++) {
System.out.println("正常");
if (i == 2) {
break;//跳出并结束当前循环的执行
}
}
//continue
//场景:循环五天,但是第三天暂停,第四天恢复
for (int i = 1; i <= 5; i++) {
if (i == 3) {
continue;//立即跳出当次执行,进入循环下一次
}
System.out.println("洗碗" + i);
}
}
}
break特殊用法
Scanner sc = new Scanner(System.in);
OUT:
while (true) {
System.out.println("输入一个数字:");
int g = sc.nextInt();
for (int i = 0; i < num.length; i++) {
if (g == num[i]) {
System.out.println("运气不错,猜中了。该数据第一次出现的位置为" + i);
break OUT;
}
}
System.out.println("未猜中");
}
随机数Random类
Random随机数技术
作用:用于在程序中获得随机数的技术
步骤:
1.导包
2.得到随机数
3.调用随机数的功能获取0-9的随机数
package com.cat.test;
import java.util.Random;
public class Test8 {
public static void main(String[] args) {
Random r = new Random();
int a = r.nextInt(10);
System.out.println(a);
}
}
注意:
nextInt(n)功能只能生成0至n-1之间的随机数,不包含n
技巧:
r.nextInt(10)只能生成0-9,但是r.nextInt(10)+1能生成1-10
r.nextInt(origin:10,bound:31)代表10-30
案例:猜数字游戏
随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏
package com.cat.test;
import java.util.Random;
import java.util.Scanner;
public class Test9 {
public static void main(String[] args) {
Random r = new Random();
int num = r.nextInt(100) + 1;
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请猜测数据:");
int g = sc.nextInt();
if (g > num) {
System.out.println("猜大了");
} else if (g < num) {
System.out.println("猜小了");
} else {
System.out.println("正确,是" + g);
break;
}
}
}
}