3.分支结构与循环结构
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.分支结构与循环结构相关的知识,希望对你有一定的参考价值。
1 程序结构
程序结构分为顺序结构、分支结构、循环结构。分支结构有:if结构,if....else结构,if...else if....else ,if...else结构,switch结构;循环结构有:while循环,do....while循环,for循环。
2 分支结构
①if结构 语法:
if(布尔表达式){
//语句;
}
执行过程:如果布尔表达式为true执行其下语句,布尔表达式为false时不执行其下语句。
{}可以省略,如果省略将执行第一个语句块。为了程序的可读性推荐不要省略{}
示例1:
public class TestIf2{
public static void main(String[] args){
//Math.round();
//double d = Math.random(); //产生一个(0,1)之间的随机数
//产生[1,6]之间随机整数:1,2,3,4,5,6
//int d = (int)(Math.random()*6)+1; //[1,6]
//产生一个[10~20]之间的随机整数
//int d2 = (int)(Math.random()*11)+10;
//System.out.println(d2);
/*
用户投掷3个骰子,点数之和
15=<sum<=18---->今天手气不错,可以买张彩票!
12=<sum<15--->今天手气一般,可以去刮奖!
sum<12---->今天手气较差,洗洗睡吧!
*/
int d1 = (int)(Math.random()*6)+1;
int d2 = (int)(Math.random()*6)+1;
int d3 = (int)(Math.random()*6)+1;
int sum = d1+d2+d3;//计算骰子总数
System.out.println("总点数:"+sum);
if(sum>=15&&sum<=18){
System.out.println("今天手气不错,可以买张彩票!");
}
if(sum>=12&&sum<15){
System.out.println("今天手气一般,可以去刮奖!");
}
if(sum<12){
System.out.println("今天手气较差,洗洗睡吧!");
}
}
}
②if...else结构 语法:
语法:
if(布尔表达式){
//语句1
}else{
//语句2;
}
执行过程:如果布尔表达式值为true,执行语句1,否则执行语句2.
{}也是可以省略的,省略之后只执行第一个语句块。
示例1:根据用户输入的年份,加上一个[0,10]随机数后,判断该年是否为闰年。
分析:
1.获取用户输入的年份:Scanner
2.产生一个[0,10]之间的随机整数:Math.random()-->(0,1)之间的随机小数
3.判断该年是为闰年,闰年的判断条件:能被4整除并且不能100整除;或者能被400整除。
import java.util.Scanner;
public class TestIfElse2{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入一个年份:");
int year = input.nextInt();
//产生[0,10]之间的随机整数
int random = (int)(Math.random()*11);
year = year+random;
//判断是否为闰年
if((year%4==0&&year%100!=0)||year%400==0){
System.out.println(year+"为闰年,共366天!");
}else{
System.out.println(year+"为平年,共365天!");
}
}
}
示例2:(if嵌套)
if嵌套:一个if语句包含了其他的if语句。
if(条件1){
if(条件2){
//语句;
}
}
/*
判断用户输入的3位数是否为水仙花数
水仙花数=个位^3+十位^3+百位^3;
分析:
1.获取用户输入的数字
2.判断该数字是否为3位数。如果不是3位数肯定不是水仙花数,如果是3位数有可能是水仙花数。
3.判断该数字是否满足水仙花数的条件:水仙花数=个位^3+十位^3+百位^3;
*/
import java.util.Scanner;
public class TestIfElse3{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入一个三位数:");
int num = input.nextInt();
if(num>=100&&num<=999){
int ge = num%10;//个位
int shi =num/10%10;//十位 123/10==>12%10==>2
int bai = num/100;//百位
//int sum = ge*ge*ge+shi*shi*shi+bai*bai*bai;
//Math.pow(double x,double y):计算x的y次幂
int sum = (int)(Math.pow(ge,3)+Math.pow(shi,3)+Math.pow(bai,3));
if(num==sum){
System.out.println(num+"是一个水仙花数!");
}else{
System.out.println(num+"不是一个水仙花数!");
}
}else{
System.out.println("输入数字有误,请输入三位数!");
}
}
}
③if....else if....else结构 语法:
if(条件1){
//语句1;
}else if(条件2){
//语句2;
}else if(条件3){
//语句3
}....{
}else{
//语句N;
}
执行过程:先判断条件1是否成立,如果条件1成立执行语句1并跳出条件结构;如果条件1不成立继续判断其下的条件2,如果条件2成立执行语句2....,所有条件都不成立执行else中语句N.
注意:条件的位置有可能影响执行结构,条件位置一般需要满足从范围小的条件到范围大的条件逐次摆放。
示例1:
public class TestElseIf{
public static void main(String[] args){
int age = (int)(Math.random()*130);//[0,129]
System.out.println("年龄是:"+age);
if(age<12){
System.out.println("儿童,喜欢玩!");
}else if(age<25){
System.out.println("青年,要学习!");
}else if(age<45){
System.out.println("中年,要工作!");
}else if(age<65){
System.out.println("中老年,要养生!");
}else{
System.out.println("老年,要注意身体!");
}
/*
if(age<65){
System.out.println("中老年,要养生!");
}else if(age<45){
System.out.println("中年,要工作!");
}else if(age<25){
System.out.println("青年,要学习!");
}else if(age<12){
System.out.println("儿童,喜欢玩!");
}else{
System.out.println("老年,要注意身体!");
}
*/
}
}
示例2:根据用户输入的分数,输出该分数对应的等级.
90~100:优
80~90:良
70~80:中
70以下:差
import java.util.Scanner;
public class TestElseIf2{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入分数:");
int score = input.nextInt();
if(score>=0&&score<=100){
if(score>=90&&score<=100){
System.out.println("优!");
}else if(score>=80&score<90){
System.out.println("良!");
}else if(score>=70&&score<80){
System.out.println("中!");
}else{
System.out.println("差!");
}
}else{
System.out.println("您输入的分数有误,请输入0~100之间的分数。");
}
}
}
④switch结构
switch可以代替多重if条件结构中等值判断。
语法:
switch(表达式){
case 值1:
语句1;
[break];
case 值2:
语句2;
[break];
.....
default
语句N;
[break];
}
执行过程:将表达式的值与case中的常量值挨个进行比较,如果匹配成功将执行其下语句,直到遇到break关键字跳出switch结构。
注意:
1)swtich中传入的表达式可以是byte,short,int,char,从JDK1.7以后支持String类型
2)case后的常量值不能重复
3)case语句中的break是可以省略的,但如果省略break将出现case穿透。
4)default语句也是可以省略的。
示例1:
实现一个快捷拨号程序:
1---->打给爸爸.
2---->打给妈妈
3---->打给爷爷
4---->打给奶奶
其他数字---->拨号错误。
import java.util.Scanner;
public class TestSwitch{
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("打给妈妈!");
}else if(num==3){
System.out.println("打给爷爷!");
}else if(num==4){
System.out.println("打给奶奶!");
}else{
System.out.println("拨号错误!");
}
*/
switch(num){
case 1:
System.out.println("打给爸爸!");
break;
case 2:
System.out.println("打给妈妈!");
break;
case 3:
System.out.println("打给爷爷!");
break;
case 4:
System.out.println("打给奶奶!");
break;
default:
System.out.println("拨号错误!");
break;
}
}
}
3 循环结构
如果遇到需要反复做的事情,可以利用循环进行解决。
①while循环 语法:
while(布尔表达式){
//循环体
}
执行过程:
步骤1:先判断布尔表达式值是否为true,如果为true进入步骤2
步骤2:执行while中循环体,执行结束后回到步骤1
注意:检查循环是否能退出(检查循环条件是否不满足的时候)
特点:先判断,后执行,有可能一次都不执行。
示例1:计算0~100之间所有的偶数和
public class TestWhile{
public static void main(String[] args){
int i=0;
int sum=0;
while(i<=100){
if(i%2==0){
sum+=i;//sum=sum+i;
}
i++;
}
System.out.println("0~100之间所有的偶数和为:"+sum);
示例2:计算0~100之间所有7的倍数和带7的数字之和。
int i=0;
int sum=0;
while(i<=100){
//i%7==0:7的倍数;i/10==7:十位为7的数字;i%10==7:个位为7的数字
if(i%7==0||i/10==7||i%10==7){
sum+=i;
}
i++;
}
System.out.println("0~100之间所有的7的倍数和带7的数字之和为:"+sum);
}
}
②do...while循环 语法:
do{
//循环体;
}while(布尔表达式);
执行过程
步骤1:先执行循环体,进入步骤2
步骤2:判断布尔表达式是否为true,如果值为true,执行步骤1,否则退出循环。
特点:先执行,后判断。执行会执行1次。
示例1:打印0~100之间所有3的倍数,要求每4个数换行。
int i=0;
int count=0;
do{
if(i%3==0){
System.out.print(i+"\t");
count++;
//每4个数换行
if(count%4==0){
System.out.println();//换行
}
}
i++;
}while(i<=100);
示例2:输出100~1000之间的所有水仙花数
int i=100;
int count=0;
do{
//获取三位数的个位,十位,百位
int ge = i%10;//个位
int shi = i/10%10;//十位
int bai = i/100;//百位
int sum = ge*ge*ge+shi*shi*shi+bai*bai*bai;
if(sum==i){
System.out.print(i+"\t");
count++;
if(count%3==0){
System.out.println();
}
}
i++;
}while(i<1000);
}
}
③for循环 语法:
for(表达式1;表达式2;表达式3){
//循环体;
}
表达式1:循环变量的初始化,只会执行1次
表达式2:循环条件
表达式3:更改循环变量(步进)
注意:从语法的角度上说表达式1,表达式2,表达式3都可以省略,分号不能省略。但是如果省略了表达式2和表达式3经常会造成死循环。终止执行:ctrl+c
特点:先判断,后执行。有可能一次都不执行。
执行过程:
步骤1:先执行表达式1进行循环变量的初始化工作
步骤2:执行表达式2进行循环条件的判断,如果条件为true,执行步骤3,否则退出循环。
步骤3:执行循环体;
步骤4:执行表达式3进行更改循环变量,然后执行步骤2。
示例1:输出1000~10000之间的所有玫瑰花数,每4个数一行进行输出。
public class TestFor{
public static void main(String[] args){
int count=0;
for(int i=1000;i<10000;i++){
int ge = i%10;//个位
int shi = i/10%10;//十位
int bai = i/10/10%10;//百位
int qian = i/1000;//千位
int sum = ge*ge*ge*ge+shi*shi*shi*shi+bai*bai*bai*bai+qian*qian*qian*qian;
if(sum==i){
System.out.print(i+"\t");
count++;//计数
if(count%4==0){
System.out.println();
}
}
}
}
}
4 break和continue
①break关键字可以用于switch结构和循环结构
作用: 1.如果用于switch结构,跳出当前的case语句
2.如果用于循环结构中,跳出当前循环结构。
②continue关键字只能用于循环结构。
作用:跳过本次循环,重新开始下一趟循环。
示例1:生成0-100随机数,直到生成88为止,停止循环!
public class TestBreak{
public static void main(String[] args){
int count=0;
while(true){
count++;
int random = (int)(Math.random()*101);
if(random==88){
break;//跳出循环
}
}
System.out.println("总共用了"+count+"次生成88");
}
}
示例2:
public class TestBreak{
public static void main(String[] args){
for(int i=1;i<100;i++){
if(i%3==0){
//break;//跳出循环
continue;//跳过本次循环,重新开始下一趟循环。
}
System.out.println(i);
}
System.out.println("循环终止....");
}
}
5 return
可以使用return关键字结束当前函数的执行。
在函数中只要遇到了return关键字,终止当前函数(方法),并回调函数(方法)的被调用处。
示例1:
public class TestReturn{
public static void main(String[] args){
for(int i=0;i<10;i++){
if (i%2!=0)
return;
//break;
System.out.print(i);
}
System.out.println("循环执行结束......");
}
}
以上是关于3.分支结构与循环结构的主要内容,如果未能解决你的问题,请参考以下文章