分支及循环结构

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("循环执行结束......");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值