04 循环结构

 

1.1 为什么要使用循环?

 

java中存在3中循环的形式:while/dowhile/for

 

1.2 while循环

[1] 初始化内容

while([2]循环控制条件){

[3]循环操作

[4]迭代变化

}

 


需求控制台依次输出1-5 

public class Test01{

public static void main(String[] args){

// while

 

// [1] 初始化内容(循环控制变量)

int i = 1;

 

// [2]循环控制条件

while(i<=5){

// [3]输出

System.out.println(i);

// [4] 迭代变化

i++;

}

 

}

}

 


需求:1+2+3+…10的 

 

public class Test02{

public static void main(String[] args){

// 求和:1+2+3+...+10

 

int i = 1;

int sum  =0;

while(i<=5){

sum += i;

i++;

}

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

 

}

}

 

 


列举法
:列举循环的执行过程。 

i

i<=5

sum

i++

1

1

2

2

3

3

3

6

4

4

10

5

5

15

6

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

while可以if结合使用。

public class Test03{

public static void main(String[] args){

// 求和:1-100偶数的和

 

int i = 1;

int sum = 0;

while(i<=100){

if(i % 2 == 0){

sum += i;

}

 

i++;

}

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

 

}

}

 


  

 

1.3 do…while 循环

// [1]初始化

do{

   // [2]循环体

   // [3]迭代变化

}while([4]循环控制条件)

 


 
 

需求:输出1-5

public class Test06{

public static void main(String[] args){

 

int i = 1;

int sum = 0;

 

do{

if(i%2==0){

sum += i;

}

 

i++;

}while(i<=10);

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

}

}

 


 
 

whiledo…while的区别

相同点:[1]-[4]条件都相同。

不同点while判断后执行。do…while先执行,后判断dowhile至少执行循环体一次。

1.4 双层循环

循环支持嵌套。

 

需求:控制台输出以下图形

 

****

****

****

 

 

int i = 1;

int j;

while(i<=3){ // i 控制行

 

j=1;

while(j<=4){ // j控制列

System.out.print("*");

j++;

}

System.out.println("");

 

i++;

}

 

 


总结:
 

双层循环中

[1] 层循环控制行,内层循环控制列。外层循环执行一次,内层循环执行n

[2] 时间复杂度和空间复杂度?

[3] 双层循环中,一定要注意不要过度申请变量。

[4] 双层循环 =二维结构的问题 =行列问题

 

 

1.5 for循环

for([1]初始化;[2]循环控制条件;[4]迭代变化){

   [3]循环体

}

 


for执行
过程 

  1. 执行初始化代码
  2. 执行循环控制条件,如果不成立,循环不执行。如果条件成立,执行步骤3
  3. 循环体执行
  4. 迭代变量执行重复2-3-4步骤

 

需求:1-5输出

public class Test10{

public static void main(String[] args){

 

// 1-5

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

System.out.println(i);

}

 

}

}

 

列举法

i

i<=5

输出

i++

 

 

 

 

需求:求1-10所有偶数的和

public class Test12{

public static void main(String[] args){

 

int sum = 0;

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

if(i%2 == 0){

sum += i;

}

}

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

 

}

 


 
 

特殊情况1: 把[1]初始化提升for循环

public class Test12{

public static void main(String[] args){

 

 

int i = 1;

for(;i<=10;i++){

System.out.println("*");

}

System.out.println(i);

}

}

 


特殊
情况2:省略[2]循环控制条件=>导致死循环 

 

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

System.out.println("*");

}

 

 


特殊情况
3:省略
[4]迭代变化=>导致死循环 

for(int i = 1;i<=10;){

System.out.println("*");

 

if(条件){

i++;

}else{

i+=2;

}

 

}

 


总结
 

[1]死循环 for(;;){} / while(true) / do…while(true)

 

for循环的回退操作

import java.util.Scanner;

public class Test13{

public static void main(String[] args){

 

Scanner sc = new Scanner(System.in);

 

 

int up30 = 0;

int age = 0;

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

System.out.print("请输入第"+i+"位顾客的年龄:");

age = sc.nextInt();

 

if(age < 0){

System.out.println("年龄输入不合法,请重新输入!");

i--;

}else{

if(age >= 30){

up30++;

}

}

}

 

System.out.println("30岁以上的比例是"+(up30 / 10.0));

}

}

 


复杂
for循环 

import java.util.Scanner;

public class Test14{

public static void main(String[] args){

 

Scanner sc = new Scanner(System.in);

System.out.println("请输入一个数字:");

int num = sc.nextInt();

 

/*

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

System.out.println(i+"+"+(num-i)+"="+num);

}

*/

 

// int i = 1,j = 2;

 

 

for(int i=0,j=num;i<=num;i++,j--){

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

}

 

}

}

 


for
循环的嵌套 

****

****

****

 

public class Test15{

public static void main(String[] args){

 

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

 

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

System.out.print("*");

}

 

System.out.println();

}

 

}

}

 

  

 

1.6 break和continue

break:用于终止整个循环。

continue:用于中止本次循环,进入下一次循环。

 

 

public class Test16{

public static void main(String[] args){

 

/*

// 需求:输出1-10

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

// 遇到2就终止整个循环

if(i == 2){

break;

}

System.out.println(i);

}

System.out.println("我是for循环后的语句");

*/

 

// 需求:输出1-10

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

if(2 == i){

continue;

}

System.out.println(i);

}

}

}

 

总结:

breakcontinue的异同

相同点: 

[1]break/continue 后边的语句都不能被执行。

[2]可以用于循环

 

不同点

[1]break终止循环continue 中止循环,继续下一次循环。

[2]break可以用于跳出switch…case

 

案例:模拟atm取款

 

import java.util.Scanner;

public class Test18{

public static void main(String[] args){

 

Scanner sc = new Scanner(System.in);

int type = 0;

boolean willQuit = false;

for(;;){

System.out.println("1.取款\t2.转账\t3.存款\t4.退出");

System.out.print("请选择:");

type = sc.nextInt();

 

switch(type){

case 1:{

System.out.println("当前操作取款...");

break;

}

case 2:{

System.out.println("当前操作转账...");

break;

}

case 3:{

System.out.println("当前操作存款...");

break;

}

case 4:{

System.out.println("程序退出,谢谢使用...");

willQuit = true;

break;

}

}

 

if(willQuit){

break;

}else{

continue;

}

}

}

}

 

 

import java.util.Scanner;

public class Test19{

public static void main(String[] args){

 

Scanner sc = new Scanner(System.in);

int type = 0;

for(;;){

System.out.println("1.取款\t2.转账\t3.存款\t4.退出");

System.out.print("请选择:");

type = sc.nextInt();

 

switch(type){

case 1:{

System.out.println("当前操作取款...");

continue;

}

case 2:{

System.out.println("当前操作转账...");

continue;

}

case 3:{

System.out.println("当前操作存款...");

continue;

}

case 4:{

System.out.println("程序退出,谢谢使用...");

break;

}

}

 

break;

 

}

}

}

 

 

1.7 作业

1.输出9*9乘法

 

2.

  *

 * *

* * *

 

3.

  *

 * *

* * *

 * *

  *

  

4.

  *

 * *

*   *

 * *

  *

 

 

posted @ 2019-04-28 16:15  ___mouM  阅读(238)  评论(0编辑  收藏  举报