第二章 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));
	}
}
分类: Java