三种循环的运用及break和continue的区别
while是最基本的循环
语法结构:
while(布尔表达式){
//循环内容
}
- 只要布尔表达式为true,循环就会一直执行下去。
- 我们大多数情况是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环。
- 少部分情况需要循环一直执行,比如服务器的请求响应监听等。
- 循环条件一直为true就会造成无限循环[死循环],我们的正常业务编程中要尽量避免死循环。会影响程序性能或者造成程序卡死崩溃!
- 思考:计算1+2+3+....+100=?
package Struct;
public class WhileDemo02 {
public static void main(String[] args) {
//计算1+2+3+4....+100=?
int i = 0;
int sum = 0;
while(i<=100){
sum = sum+i;
i++;
System.out.println(sum);//打印计算过程
}
System.out.println(sum);//输出结果5050
}
}
do ......while循环
对于while语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。
do......while循环和while循环相似,不同的是do......while循环至少会执行一次。
语法结构:
do{
//代码语句
}while(布尔表达式);
练习代码
package com.chen.www.struct;
public class WhileDemo01 {
public static void main(String[] args) {
int i = 0;
int sum = 0;
do {
//先干活,再判断条件是否为真
sum =sum+i;
i++;
}while(i<=100);
System.out.println(sum);
}
}
while和do......while的区别:
- while先判断后执行,do......while是先执行后判断!
- do......while总是保证循环体会被至少执行一次!这是它们的主要差别。
for循环
虽然所有循环结构都可以用while或者do...while表示,但是java提供了另一种语句——for循环,它能使一些循环结构变得更加简单。
for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。
for循环执行的次数是在执行前就确定的。
语法结构:
for(初始化;布尔表达式;更新){
//代码语句
}
- while与for循环
package Struct;
public class ForDemo01 {
public static void main(String[] args) {
int a = 0;//初始化值
while(a<=100){//条件判断
System.out.println("a="+a);//循环体
a+=2;//迭代
}
System.out.println("while循环结束");
//初始化值;条件判断;迭代
for (int i= 0;i<=100;i+=2){
System.out.println("i="+i);//循环体
}
System.out.println("for循环结束");
}
}
- 练习1:计算0到100之间的奇数和偶数的和
package Struct;
public class ForDemo02 {
public static void main(String[] args) {
//练习1:计算0到100之间的奇数和偶数的和
int oddSum= 0;
int evenSum= 0;
for (int i = 0; i <= 100; i++) {//快捷生成for循环 “100.for”
if (i % 2 == 0){//i膜2余数等于0则为偶数,否则为奇数
oddSum += i;//i=oddSum+i
}else{
evenSum+=i;//i=evenSum+i
}
}
System.out.println("输出偶数和"+oddSum);//2550
System.out.println("输出奇数和"+evenSum);//2500
}
}
- 练习2:用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个
package Struct;
public class ForDemo03 {
public static void main(String[] args) {
//练习2:用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个
for (int i = 0; i <= 1000; i++) {//1000.for
if (i%5==0){
System.out.print(i+"\t");//输出结果i+空格
}
if (i%15==0){
System.out.println();//换行
}
}
//println 输出完会换行
//print 输出完不会换行
}
}
- 练习3:打印九九乘法表
package Struct;
public class ForDemo04 {
public static void main(String[] args) {
//练习3:打印九九乘法表
/**
* 1*1=1
* 2*1=2 2*2=4
* 3*1=3 3*2=6 3*3=9
* 4*1=4 4*2=8 4*3=12 4*4=16
* 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
* 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
* 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
* 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
* 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
*/
/**步骤
* 1、先打印第一列
* 2、把固定的1再用一个循环包裹起来,将1用变量替换掉
* 3、去掉重复项,i <= j
*/
for (int j = 1; j <= 9; j++) {
for (int i = 1; i <= j; i++) {
// \t加一个空格,这里采用不换行的print来输出
System.out.print(j+"*"+i+"="+(j*i)+"\t");
}
//换行
System.out.println();
}
}
}
- 练习4:打印一个5行的三角形
package Struct;
public class TextDemo01 {
public static void main(String[] args) {
//打印三角形 5行(练习一个星期,每晚理解性练习一遍)
/*打印效果:
*
***
*****
*******
*********
*/
for (int i = 1; i <= 5; i++) {
//当j大于等于i时,打印一个空格,j-1
for (int j = 5; j >= i; j--) {
System.out.print(" ");
}
//当j小于等于i时,打印一个*,j+1
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
//当j小于i时,输出一个*,j+1
for (int j = 1; j < i; j++) {
System.out.print("*");
}
//换行
System.out.println();
}
}
}
增强for循环(初识数组)
练习代码:
package Struct;
public class ForPlusDemo05 {
public static void main(String[] args) {
int[] numbers = {10,20,30,40,50};//数组
//遍历数组的元素
for (int i = 0; i < 5; i++) {//注意这里去数组里取值的次数不能大于数组内元素的个数,否则会报错。
System.out.println(numbers[i]);
}
System.out.println("===================");
for (int x:numbers){//将从numbers数组中每一次取出来的值,都赋值给x
System.out.println(x);//输出打印x
}
}
}
break和continue
break在任何循环的主体部分,均可以用break控制循环的流程。break用于强制退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用,防止穿透)
continue语句在循环体中,用于终止某次循环过程,即跳过循环尚未执行的语句,接着进行下一次是否执行循环的判定。
break练习代码
package Struct;
public class BreakDemo {
public static void main(String[] args) {
int i = 0;
while (i<100){
i++;
if (i==50){
//break强制停止循环
break;
}
System.out.println(i);//输出结果1-49,当i等于50的时候整个循环就停止了
}
}
}
continue练习代码
package Struct;
public class ContinueDemo {
public static void main(String[] args) {
int i = 0;
while(i<100){
i++;
if (i==20){
System.out.println();
continue;//用来跳过某些特定情况
}
//输出结果1-100,没有输出20这个数,当i等于20的这次循环被跳过了
System.out.println(i);
}
}
}
综合小练习:
package struct;
import java.util.Scanner;
public class IfDemo01 {
public static void main(String[] args) {
//芝麻开门小程序
Scanner s = new Scanner(System.in);
System.out.print("请输入口令:");
String str = s.nextLine();
int i = 3;
while (i>0){
if (str.equals("芝麻开门")){
System.out.print("“"+str+"“"+"........");
System.out.print("口令正确!");
break;
}else{
System.out.println("口令输入错误!您还有"+i+"次机会");
System.out.print("请重新输入:");
//再次输入
str = s.nextLine();
}
i--;
}
System.out.println("对不起您已经输错三次口令,系统已锁定!");
s.close();
}
}