第二章 Java基本语法(下):程序流程控制(二)
- 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。
- 其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:顺序结构,分支结构,循环结构
顺序结构:程序从上到下逐行地执行,中间没有任何判断和跳转;
分支结构:根据条件,选择性的执行某段代码;有if…else和switch-case两种分支语句。
循环结构:根据循环条件,重复性的执行某段代码;有while、do…while、for三种循环语句;注:JDK1.5提供了foreach循环,方便遍历集合、数组元素。
一、循环的四个要素:
1、初始化条件
2、循环条件 ——> 是boolean类型
3、循环体
4、迭代条件
二、while循环的结构
1初始化条件 while (2循环条件){ 3循环体; 4迭代条件; }
说明:
1、写while循环千万小心,不要丢了迭代条件,一但丢了,就可能导致死循环!
2、 for循环和while循环是可以相互转换。
3、区别:for循环与while循环的初始化条件部分的作用范围不同。
1初始化条件 do{ 3循环体; 4迭代条件; }while(循环条件2);
说明:
1、do – while 循环至少会执行一次循环体。
class DoWhileTest { public static void main(String[] args) { System.out.println("遍历100以内的偶数"); int num = 1; do{ if(num % 2 == 0){ System.out.println(num); } num++; }while(num <= 100); } }
do-while 至少执行一次
class DoWhileTest { public static void main(String[] args) { int number1 = 10; while(number1 <= 10){ System.out.println("Hello While!"); number1--; } int number2 = 10; do{ System.out.println("Hello do-While!"); number2--; }while(number2 <= 10); } }
import java.util.Scanner; class ForWhileTest { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int positiveNumber = 0;//记录正整数的个数; int negativeNumber = 0;//记录负整数的个数; //while(true){ for(;;){ int number = scan.nextInt(); //判断number的正负情况 if (number > 0){ positiveNumber++; }else if (number < 0){ negativeNumber++; }else{ //一但执行break,跳出循环 break; } } System.out.println("输入的正数有 " + positiveNumber + " 个"); System.out.println("输入的负数有 " + negativeNumber + " 个"); } }
class ForForTest { public static void main(String[] args) { for(int j = 1;j <=5;j++){ for (int i = 1;i < 6 ; i++){ System.out.print("*"); } System.out.println(); } } } class ForForTest { public static void main(String[] args) { for(int j = 1;j <10;j++){//控制行数 for (int i = 1;i <= j ; i++){//控制列数 System.out.print("*"); } System.out.println(); } } } ============================================================= class ForForTest { public static void main(String[] args) { //上半部分 for(int i = 0;i < 5;i++){ //输出行前的空格,递减 for (int j = 0;j <= 4-i ;j++ ){ System.out.print(" "); } //输出"* " for(int k = 0;k < i + 1;k++){ System.out.print("* "); } System.out.println(); } for(int i = 1;i < 5;i++){ //输出行前的空格,递减 for (int j = 1;j <= i ;j++ ){ System.out.print(" "); } //输出"* " for(int k = 1;k <= 5-i;k++){ System.out.print("* "); } System.out.println(); } } } * * * * * * * * * * * * * * * * * * * * * * * * *
1.九九乘法表 class NineNineTable { public static void main(String[] args) { 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 2.100以内的质数(现实方式一) class PrimeNumerTest1{ public static void main(String[] args) { boolean isFlag = true;//标识i是否被j除尽,一但除尽,修改其值 for (int i = 2;i <= 100 ;i++){//遍历100以内的自然数 for(int j = 2;j <= i;j++){//j:被i去除 if (i % j == 0){//i被除尽 isFlag = false; } } if (isFlag == true){ System.out.println(i); } isFlag = true;//重置isFlag } } } class PrimeNumerTest2{ public static void main(String[] args) { long start = System.currentTimeMillis(); int count = 0; boolean isFlag = true;//标识i是否被j除尽,一但除尽,修改其值 for (int i = 2;i <= 100000 ;i++){//遍历100以内的自然数 //优化一二:优化后13毫秒 for(int j = 2;j< Math.sqrt(i);j++){//j:被i去除 //for(int j = 2;j < i;j++){ if (i % j == 0){//i被除尽 isFlag = false; break;// 优化一:优化前19889毫秒,break优化后2263毫秒 } } if (isFlag == true){ //System.out.println(i); count++; } isFlag = true;//重置isFlag } long end = System.currentTimeMillis(); System.out.println("个数为:" + count); System.out.println("运行所花的时间为:" + (end-start)); } }
break与continue:
break:用在switch-case和循环结构中,结束当前循环,跳出包裹此关键字最近的一层循环
continue:用在循环结构中,结束当次循环
关键字后面不能声明执行语句
class BreakContinueTest { public static void main(String[] args) { for(int i = 1;i <=10;i++){ if (i % 4 == 0){ //break;//123 continue;//123567910 } System.out.print(i); } } } class BreakContinueTest { public static void main(String[] args) { lable1:for(int i = 1;i <=4;i++){ for(int j = 1;j <= 10;j++){ if (i % 4 == 0){ //break;//123 //continue;//123567910 //break lable1;//结束指定标识的一层循环结构 continue lable1;//结束指定标识的一层循环结构当次循环 } System.out.print(j); } System.out.println(); } } }
附加:特殊流程控制语句3
return:并非专门用于结束循环的,它的功能是结束一个方法。当一个方法执行到一个return语句时,这具方法将被结束。
与break和continue不同的是,return直接结束整个方法,不管这个return处于多少层循环之内
100以内的质数(现实方式二)
//现实方式二 class PrimeNumerTest3{ public static void main(String[] args) { long start = System.currentTimeMillis(); int count = 0; lable1:for (int i = 2;i <= 100000 ;i++){//遍历100以内的自然数 for(int j = 2;j < Math.sqrt(i);j++){//j:被i去除 if (i % j == 0){//i被除尽 continue lable1; } } count++; } long end = System.currentTimeMillis(); System.out.println("个数为:" + count); System.out.println("运行所花的时间为:" + (end-start)); } }