java流程语句_入门java第三天(java流程控制语句)

3.0 java的流程控制语句

流程控制语句是用来控制程序中各语句执行顺序的语句

控制语句分为三种: 顺序、选择、循环。

"循环结构"代表先执行a,在执行b的逻辑。eg:网上买东西,先看商品,再付款。

“选择语句"代表如果....,则......的逻辑。 eg:如果看到红的就要停车。

"循环结构"代表如果....,则在继续......的逻辑。eg: 如果允许一直在操场上跑步,则可以持续的跑下去。

3.1选择结构

选择结构分为以下四种:

1.if单选择结构

2.if-else双选择结构

3.if-else if-else多选择结构

4.switch结构

3.1.1 if单选择结构 ###

语法结构:

if(布尔表达式){

java语句块;

}

if语句对布尔表达式进行一次判断,若判断为真,则执行括号内的语句块,否则跳过该语句块。流程如下图所示:

【示例】if单选择结构

public static void main(String[] args) {

double d1 = Math.random();

System.out.println(d1);

int i = (int)(6*Math.random() + 1);

//第一种写法

if(i <= 3){

System.out.println("小");

}

//第二种写法,不推荐使用

if(i >= 4)

System.out.println("大");

}

注解说明:Math.random()该方法用于产生一个0到1区间的double类型的随机数 [0,1)

3.1.2 if-else双选择结构

语法结构:

if(布尔表达式){

java语句块1;

}else{

java语句块2;

}

当布尔表达式为真时,执行语句块1,否则,执行语句块2,。也就是else部分,流程图如下所示:

【示例】if-else结构

public static void main(String[] args){

//随机产生[0.0, 4.0)区间的半径,并根据半径求圆的面积和周长

double d1 = 4 * Math.random();

double area = Math.pow(d1, 2) * Math.PI;

double circle = Math.PI * 2 * d1;

System.out.println("半径为: "+d1);

System.out.println("面积为: "+area);

System.out.println("周长伟:"+circle);

if(area >= circle){

System.out.println("面积大于或等于周长");

}else{

System.out.println("周长小于面积");

}

}

半径为: 2.089136450893916

面积为: 13.711453209259073

周长伟:13.126431452949959

面积大于或等于周长

条件运算符有时候可用于代替if-else,如示例二与示例三所示。

【示例二】if-else结构

public class Test3 {

public static void main(String[] args) {

int a=2;

int b=3;

if (a

System.out.println(a);

} else {

System.out.println(b);

}

}

}

2

【示例三】使用条件运算符

public class Test4 {

public static void main(String[] args) {

int a=2;

int b=3;

System.out.println((a

}

}

2

3.1.3 if-else if-else多选择结构

语法结构:

if(布尔表示式1){

java语句块1;

}else if(){

java语句块2;

}.....

else if(){

java语句块n;

}else{

java语句块 n+1;

}

当布尔表达式1为真时,执行语句块1;否则,判断布尔表达式2,当布尔表达式2为真时,执行语句块2;否则,继续判断布尔表达式3······;如果1~n个布尔表达式均判定为假时,则执行语句块n+1,也就是else部分。流程图如下图所示。

【示例】if-else if-else多选择结构

public static void main(String[] args){

int score = (int)(100*Math.random())+1;

if(score >= 85){

System.out.println("等级A");

}else if(score >= 70 && score <= 84){

System.out.println("等级B");

}else if(score >= 60 && score <= 69){

System.out.println("等级c");

}else{

System.out.println("等级D");

}

}

等级D

3.1.4 switch多选择语句

语法结构:

switch (表达式) {

case 值1:

语句序列1;

[break];

case 值2:

语句序列2;

[break];

… … … … …

[default:

默认语句;]

}

switch语句会根据表达式的值从相匹配的case标签处开始执行,一直执行到break语句处或者是switch语句的末尾。如果表达式的值与任一case值不匹配,则进入default语句(如果存在default语句的情况)。

根据表达式值的不同可以执行许多不同的操作。switch语句中case标签在JDK1.5之前必须是整数(long类型除外)或者枚举,不能是字符串,在JDK1.7之后允许使用字符串(String)。

当布尔表达式是等值判断的情况,可以使用if-else if-else多选择结构或者switch结构,如果布尔表达式区间判断的情况,则只能使用if-else if-else多选择结构。

switch多选择结构的流程图如下图所示。

【示例一】switch多选择语句 -->int

public static void main(String[] args) {

int month = (int)(Math.random()*12 + 1);

System.out.println("月份:" + month);

switch(month){

case 1:

System.out.println("一月份,快过年了!");

break;

//当break不写时,会一直往下执行,直到碰到下一个break或者进入了default中,直接出去了

case 2:

System.out.println("二月份,过年了!");

break;

default :

System.out.println("其它月份");

break;

}

}

月份:8

其它月份

【示例二】switch多选择语句 -->char

public static void fun(){

char x = 100;

switch(x){

case 100:

System.out.println("One Hundred");

break;

case 200:

System.out.println("Two Hundred");

break;

case 300:

System.out.println("Three Hundred");

break;

default:

System.out.println("defult");

}

}

【示例三】switch多选择语句-->字符串

public static void fun(){

String x = "100";

switch(x){

case "100":

System.out.println("One Hundred");

break;

case "200":

System.out.println("Two Hundred");

break;

case "300":

System.out.println("Three Hundred");

break;

default:

System.out.println("defult");

}

}

One Hundred

【示例四】switch多选择语句 -->不带break

public static void show(){

char c = 'a';

int read = (int)(26*Math.random());

char c2 = (char) (c+read);

System.out.print(c2+": ");

switch(c2){

case 'a':

case 'e':

case 'i':

case 'o':

case 'u':

System.out.println("元音字母");

break;

case 'y':

case 'w':

System.out.println("半元音字母");

break;

default :

System.out.println("辅音字母");

}

}

z: 辅音字母

3.2 java 循环结构

循环结构分两大类,一类是当型,一类是直到型。

当型: 当布尔表达式条件为true时,反复执行某语句,当布尔表达式的值为false时才停止循环,比如:while与for循环。

直到型:

先执行某语句, 再判断布尔表达式,如果为true,再执行某语句,如此反复,直到布尔表达式条件为false时才停止循环,比如do-while循环。

3.2.1 while循环

语法结构:

while(布尔表达式){

循环体;

}

在循环刚开始时,会计算一次“布尔表达式”的值,若条件为真,执行循环体。而对于后来每一次额外的循环,都会在开始前重新计算一次。

语句中应有使循环趋向于结束的语句,否则会出现无限循环–––"死"循环。

while循环结构流程图如下图所示。

【示例】while循环结构 求1到100的累加和

public static void main(String[] args){

//计算1+2+3+...+100

int i = 0;

int sum = 0;

while(i <= 100){

sum += i++;

}

System.out.println("sum: "+sum);

}

sum: 5050

这种写法就陷入了死循环,缺少是循环结束的语句

while(true){

循环体;

}

3.2.2 do- while循环

语法结构:

do{

循环体;

}while(布尔表达式);

do-while循环结构会先执行循环体,然后再判断布尔表达式的值,若条件为真,执行循环体,当条件为假时结束循环。do-while循环的循环体至少执行一次。do-while循环结构流程图如下所示。

【示例】do-while循环结构:1-100之间的累加和

public static void main(String[] args) {

int i = 0;

int sum = 0;

do {

sum += i; // sum = sum + i

i++;

} while (i <= 100);//此处的;不能省略

System.out.println("sum= " + sum);

}

sum=5050;

【示例】while与do-while的区别

//do-while和while的区别

public static void show(){

int a = 0;

//while循环 ,先判断在执行

while(a > 0){

System.out.println(a);

a++;

}

System.out.println("===========");

//do-while循环,先执行在判断

do{

System.out.println(a);

a++;

}while(a < 0);

}

===========

0

从运行结果可以看出do-while至少会执行一次;

3.2.3 for循环

语法结构:

for(初始表示式; 布尔表达式 ; 迭代因子 ){

循环体;

}

for循环在第一次反复之前要进行初始化,即执行初始表达式;随后,对布尔表达式进行判定,若判定结果为true,则执行循环体,否则,终止循环;最后在每一次反复的时候,进行某种形式的“步进”,即执行迭代因子。

A. 初始化部分设置循环变量的初值

B. 条件判断部分为任意布尔表达式

C. 迭代因子控制循环变量的增减

for循环在执行条件判定后,先执行的循环体部分,再执行步进。

for循环结构的流程图如下图所示。

【示例】for循环

public static void main(String[] args) {

//求1-100之间的累加和

int sum = 0;

//i变量的作用域,仅限于for内部

for(int i = 0; i <= 100; i++){

sum += i;

}

System.out.println(sum);

}

5050

执行步骤:

1.初始化变量

2.判断布尔表达式是否为真(true)

3.执行循环体;

4.for循环变量迭代

5.回到第二步,知道布尔表达式为false时,退出循环。

for循环中可以声明多个变量示例如下:

for(int i =1, j = 3; i < 5; i++, j *= 2){

System.out.println("i= " + i + " j= " + j);

}

for循环的无线循环

for( ; ; ){

循环体;

}

for循环中的变量的 作用域仅限于for内部

3.2.4 嵌套循环

示例:

ublic static void main(String[] args) {

for(int i = 1; i <= 5; i++){

for(int j = 1; j <= 5; j++){

System.out.print(i+"\t");

}

System.out.println();

}

}

1 1 1 1 1

2 2 2 2 2

3 3 3 3 3

4 4 4 4 4

5 5 5 5 5

【示例】 使用嵌套循环打印九九乘法表

for(int i = 1; i <= 9; i++){

for(int j = 1; j <= i; j++){

System.out.print(j +"*"+ i +"="+ i*j +" ");

}

System.out.println();

}

1*1=1

1*2=2 2*2=4

1*3=3 2*3=6 3*3=9

1*4=4 2*4=8 3*4=12 4*4=16

1*5=5 2*5=10 3*5=15 4*5=20 5*5=25

1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36

1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49

1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64

1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

3.2.5 break语句和continue语句

break用于强行退出循环,不执行循环中剩余的语句。

示例:

public static void main(String[] args){

int total = 0;

System.out.println("Begin");

while(true){

total++;

int i = (int)(Math.random()*100)+1;

System.out.println(i);

if(i == 88){

break;

}

}

System.out.println("Game over, used " + total + " times.");

System.out.println("======================================");

}

当i的值为88时,if语句成立,break触发跳出for循环。

continue 语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。

示例:把100~150之间不能被3整除的数输出,并且每行输出5个

方式一:使用continue

//定义一个计数器

int count = 0;

for(int i = 100; i <= 150; i++){

if(i % 3 == 0){

continue;

}

System.out.print(i + "、");

count++;

//根据计数器判断每行是否已经输出了5个数

if(count % 5 == 0){

System.out.println();

}

}

100、101、103、104、106、

107、109、110、112、113、

115、116、118、119、121、

122、124、125、127、128、

130、131、133、134、136、

137、139、140、142、143、

145、146、148、149、

不使用continue

public static void show2(){

int count = 0;

for(int i = 100; i <= 150; i++){

if(i % 3 != 0){

count++;

System.out.print(i +"、");

}

if(count/5 == 1){

count = 0;

System.out.println();

}

}

}

100、101、103、104、106、

107、109、110、112、113、

115、116、118、119、121、

122、124、125、127、128、

130、131、133、134、136、

137、139、140、142、143、

145、146、148、149、

3.2.6 java带标签的break和continue

示例:控制嵌套循环跳转(打印101-150之间所有的质数)

质数:只有1和本身可以被除尽.

outer:

for(int i = 101; i <= 150; i++){

for(int j = 2; j < i /2; j++){// i/2,操作被除数的一半必然除不尽

if( i% j == 0){

continue outer;

}

}

System.out.println(i +" ");

}

101 103 107 109 113 127 131 137 139 149

3.3 java 语句块

语句块:是用花括号扩起的任意数量的简单Java语句。

语句块确定了局部变量的作用域。块中的程序代码,作为一个整体,是要被一起执行的。块可以被嵌套在另一个块中,但是不能在两个嵌套的块内声明同名的变量。语句块可以使用外部的变量,而外部不能使用语句块中定义的变量,因为语句块中定义的变量作用域只限于语句块。

【示例】语句块

public static void main(String[] args){

int n ;

int i;

{

int k;

int n;//不能重复定义变量n

}//变量K的作用域到此为止

}

3.4 java 中的方法

定义: 方法就是一段来完成特定功能的代码片段,类似于c语言中的函数。

方法的声明格式:

[修饰符1 修饰符2 ....] 返回值类型 方法名 (形式参数){

Java代码片段;

}

【示例】方法的声明及调用

/** main方法:程序的入口 */

public static void main(String[] args) {

int num1 = 10;

int num2 = 20;

//调用求和的方法:将num1与num2的值传给add方法中的n1与n2

// 求完和后将结果返回,用sum接收结果

int sum = add(num1, num2);

System.out.println("sum = " + sum);//输出:sum = 30

//调用打印的方法:该方法没有返回值

print();

}

/** 求和的方法 */

public static int add(int n1, int n2) {

int sum = n1 + n2;

return sum;//使用return返回计算的结果

}

/** 打印的方法 */

public static void print() {

System.out.println("方法的声明及调用");

}

sum = 30

方法的声明及调用

3.5 java中 方法的重载

方法的重载是指在一个类中可以定义多个方法名相同,但参数不同的方法。调用时系统会自动根据参数自动匹配对应的方法。

构成重载方法的条件: 1.方法名相同 2.在1的基础之上,参数的个数、类型、顺序不同(前提参数的类型不是相同的,)。

示例:

public void add(int a, int b){

}

public void add(int a, int b, int c){

}

public void add(double a, int b){

}

//较上一个方法,两者的参数顺序不同也构成重载

public void add(int a, double b){

}

误区: public void add(int a, int b){

}

public void add(int b, int a){

}

这种不属于方法的重载,本质上就是同一个方法。只是参数名不同而已。

3.6 java中的递归函数

递归的基本思想就是“自己调用自己”, 一个使用递归技术的方法将会直接或者间接的调用自己。

递归的结构:

定义递归头:如果没有头将陷入死循环,它是递归结束的条件。

递归体:什么时候调用自身的方法

示例:计算10的阶乘 10!= 1098765432*1

public int factorial(int n){

//递归头

if( n == 1){

return 1;

}else{

//递归体

return n * factorial(n -1);

}

}

3628800

factorial(10)

10 + factorial(9)--> 10! = 10 * 9!

9 + factorial(8)--> 9! = 9 * 8!

8 + factorial(7)--> 8! = 8 * 7!

7 + factorial(6)--> 7! = 7 * 6!

6 + factorial(5)--> 6! = 6 *5!

5 + factorial(4)--> 5! = 5 * 4!

4 + factorial(3)--> 4! = 4 * 3!

3 + factorial(2)--> 3! = 3 * 2!

2 + factorial(1)--> 2! =2 * 1!

factorial(1)--> 1! = 1

然后把值依次向上一级返回。

注意:递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多时速度要比循环慢的多,所以在使用递归时要慎重。

使用for循环求n!

public int show(int n){

int result = 0;

for(int i = n; i >= 1; i++){

result *= i;

}

System.out.println(result)

}

show(10); --> 3628800

使用while循环求n!

//使用while循环来求10!

public static void b(int b){

int a = 10;

int result = 1;

while(a > 1){

result *= a ;

a -= 1;

}

System.out.println(result);

}

b(10); -->3628800

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值