24.循环

十年热恋 提交于 2020-01-31 11:52:54

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

  • 当型:

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

  • 直到型:

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

while
/**
 * public static void main(String[] args) {
 * @author yuan
 *
 */
public class TestWhile {
	public static void main(String[] args) {
		//1+2+3+4+...+100 = 5050
		//暴力算法
		//1-100之间的累加和
		int i = 1;
		int sum = 0;
		
		while(i<100) {
			sum += i;
			i++;
		}
		
		System.out.println(sum);
	}
}

do while

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

	//1-100之间的累加和
public class TestDoWhile {

    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);
    }
    
}

for

语法结构:  
for (初始表达式; 布尔表达式; 迭代因子) {
循环体;
}

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


public class TestFor {
	public static void main(String[] args) {
		int sum = 0;
		for(int i=1; i<=100; ++i){
			sum += i;
		}
		System.out.println(sum);
		
		//逗号运算符		
		for(int i = 1, j = i + 10; i < 5; i++, j = i * 2) {
			System.out.println("i= " + i + " j= " + j); 
	    } 

		//无限循环
		for ( ; ; ) {    // 无限循环: 相当于 while(true)
    		System.out.println("爱你到永远!!");
		}
	}
}

初始化变量的作用域是for括号中间

嵌套循环 nested loop

public class TestNestedLoop {
	public 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();
		}
		
		
		//打印乘法口诀表  印度人的乘法口诀表是19×19
		for(int i=1; i<=19; ++i) {
			for(int j=1; j<=i; ++j) {
				System.out.print(j + "*" + i + "=" + j*i + " ");
			}
			System.out.println();
		}
		
				
		//用while循环分别计算100以内的奇数及偶数的和,并输出。  
		//[1,100]奇数和偶数的个数相同
		int i = 1, j = 2;
		int sumUneven = 0;  //奇数和
		int sumEven = 0;  //偶数和
		while(i<=100 && j<=100) {
			sumUneven += i;
			i += 2;
			
			sumEven += j;
			j += 2;
		}
		System.out.println("奇数和"+sumUneven);
		System.out.println("偶数和"+sumEven);
		
		
	    
		//用while循环或其他循环输出1-1000之间能被5整除的数,且每行输出5个。
		int number = 1;
		int flag = 0;
		while(number<=1000) {
			if(number%5 == 0) {
				System.out.print(number+" ");
				flag++;
			}
			if(flag != 0 && flag == 5) {
				System.out.println();
				flag = 0;
			}
			number++;
		}
	}
}

break和continue

在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。


public class TestBreakAndContinue {

    public static void main(String[] args) {
    	
    	//break
        int total = 0;//定义计数器
        System.out.println("Begin");
        while (true) {
            total++;//每循环一次计数器加1
            int i = (int) Math.round(100 * Math.random());
            //当i等于88时,退出循环
            if (i == 88) {
                break;
            }
        }
        //输出循环的次数
        System.out.println("Game over, used " + total + " times.");
        
        
        
        //continue
        int count = 0;//定义计数器
        for (int i = 100; i < 150; i++) {
            //如果是3的倍数,则跳过本次循环,继续进行下一次循环
            if (i % 3 == 0){
                continue;
            }
            //否则(不是3的倍数),输出该数
            System.out.print(i + "、");
            count++;//没输出一个数,计数器加1
            //根据计数器判断每行是否已经输出了5个数
            if (count % 5 == 0) {
                System.out.println();
            }
        }
   
    }

}

带标签的break和continue

goto关键字很早就在程序设计语言中出现。尽管goto仍是Java的一个保留字,但并未在Java语言中得到正式使用;Java没有goto语句。然而,在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子—带标签的break和continue。

“标签”是指后面跟一个冒号的标识符,例如:“label:”。对Java来说唯一用到标签的地方是在循环语句之前。而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们就会中断到存在标签的地方。

在 “goto有害”论中,最有问题的就是标签,而非goto, 随着标签在一个程序里数量的增多,产生错误的机会也越来越多。 但Java标签不会造成这方面的问题,因为它们的活动场所已被限死,不可通过特别的方式到处传递程序的控制权。由此也引出了一个有趣的问题:通过限制语句的能力,反而能使一项语言特性更加有用。


public class TestLableContinueAndBreak {
	  public static void main(String args[]) {
	        outer: for (int i = 101; i < 150; i++) {
	            for (int j = 2; j < i / 2; j++) {
	                if (i % j == 0){
	                    continue outer;
	                }
	            }
	            System.out.print(i + "  ");
	        }
	    }
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!