循环结构:
循环结构表示的是"如果…""就继续…"的逻辑、表示的是指在应用程序中反复执行指定代码片段的一种程序结构、它的作用是减少在程序开发中的多余、重复书写的代码、循环结构也是最能够发挥出计算机优势的程序结构。
循环结构大致能够分为两类、当型和直到型。
- 当型:
当布尔表达式为true的时候、反复执行指定代码片段、当布尔表达式为false的时候才终止循环。常见的如while循环或for循环。- 直到型:
先执行代码片段、再对布尔表达式进行判断、如果为true程序进入循环执行代码片段、直到布尔表达式为false的时候才终止循环。如 do-while循环。
while循环结构:
while循环是日常开发中非常常见的一种循环结构、在程序进入循环体之前会对布尔表达式进行判断、如果布尔表达式为true、程序进入循环体开始循环执行。
需要注意的是在循环体中都应该让循环条件有能够趋向于终止、结束的语句、不然会造成许多初学者在写应用程序的时候都会犯的问题 --> 死循环。
public class Main {
// 计算1+2+3+4...+100的总和
public static void main(String [] args){
int i = 1;
int sum = 0;
/**
语法结构:
while(循环条件(布尔表达式)){
// 循环体
// 循环体中应该具备终止循环的条件
}
*/
while(i<=100){
sum+=i; // sum = sum+i;
i++; // 自增1
}
System.out.println(i);
}
}
do-while循环结构:
do-while循环结构的特点在于它优先执行指定的代码片段、再判断布尔表达式是否为true、如果为true则一直循环到布尔表达式为false为止、也就是说do-while循环无论第一次的循环条件是否成立、都会执行一次指定的代码片段、而后再对布尔表达式进行判断决定是否继续循环。
do-while循环结构相比while循环结构的最大区别也在这里、另外语法结构也会不同、其他的都一样。
public class Main{
public static void main(String [] args){
int i = 1;
int sum = 0;
/**
do{ // 优先于while执行
// 循环体
}while(循环条件(布尔表达式));
*/
do{ // 先执行do的代码片段
sum += i; // sum = sum+i;
i++; // i 自增
}while(i<=100);// 后循环决定是否继续循环
System.out.println(sum);
}
}
for循环结构:
for循环是程序开发非常常用的循环结构、它是一种支持迭代、最有效、最灵活的循环结构、该循环结构非常简单、清晰灵活、在第一次进入循环的时候会首先对变量进行初始化(初始化表达式)、随后对布尔表达式进行判断是否满足条件、满足条件则进入循环体执行指定代码片段、每次循环结束后进行某种形式的迭代因子(步进迭代、实际就是对循环条件进行控制)、不满足条件则跳出循环体。
for循环还支持同时有多个变量初始化或多个迭代因子、之间使用逗号进行分分割
for循环同样支持死循环、语法是for( ; ; ) 该for循环结构的效果和while(true)的效果是相同的
for循环中声明的变量作用域仅限于循环体的内部、无法在外部引用for循环内部声明的变量
public class Main {
public static void main(String [] args){
/**
* 语法结构:
* for(初始化表达式;布尔表达式;迭代因子){
* // 循环体
* }
*/
int sum = 0;
for(int i = 1;i<=100;i++){
sum +=i;
}
/**
* 执行顺序;
* 1.初始化表达式 int i = 1
* 2.布尔表达式 判断 i<=100
* 3.符合条件则执行循环体 sum+=i
* 4.迭代因子 i++
* 5.执行2
*/
System.out.println(sum);
}
}
循环结构的练习题:
九九乘法表:
public class Main{
public static void main(String [] args)
{
for(int i = 0;i<=9;i++){
for(int j = 1;j<=i;j++){
System.out.print(i+"*"+j+"="+i*j+"\t");
}
System.out.println();
}
}
}
计算100以内的奇数及偶数的和:
public class Main{
public static void main(String [] args){
// 奇数变量
int odd = 0;
// 偶数变量
int even = 0;
// 条件变量
int number =100;
// 循环条件:条件变量>=0才进行循环
while(number>=0){
// 判断是否是奇数
if(number%2==0){
even+=number;
// 否则是奇数
}else{
odd+=number;
}
// 每循环一次递减一次
number--;
}
System.out.println("奇数的总和:"+odd);
System.out.println("偶数的总和:"+even);
}
}
while循环或其他循环输出1-1000之间能被5整除的数,且每行输出5个:
public class Main{
public static void main(String [] args){
// 条件变量
int number = 1000;
// 循环条件
while(number>=1){
// 条件变量能被5整数
if(number%5==0){
// 将变量输出
System.out.print(number+"\t");
}
// 5*5 = 25 = number % 25 每行输出5个
if(number%25==0){
System.out.println();
}
// 控制循环条件
number--;
}
}
}
break关键字:
顾名思义break是终止的意思、当应用程序的循环结构或是switch流程控制结构碰见break关键字的时候、会终止当前整个循环或switch。
public class Main{
public static void main(String [] args){
int total = 0; // 计数器
// 无限循环
while(true){
// 循环一次计数器+1
total++;
// 随机产生1~100之间的数
int number = (int)(100*Math.random());
System.out.println(number);
// 判断随机数==66 符合条件则break终止整个循环
if(number==66){
break;
}
}
System.out.println("程序终止、一共循环了"+total+"次");
}
}
continue关键字:
continue关键字仅能用于循环结构中、它的作用是终止当前的循环、即是跳过当前循环体中尚未被执行的代码片段、等待下一次循环的条件判定。
continue关键字用作while或do-while循环结构中时、程序执行会跳至到循环的首部。
continue关键字用作for循环结构中时、程序执行会跳至到迭代因子部分。
如果有多层循环的情况下、continue或break都可以使用标签的方式快速跳至到外层循环。
public class Main{
public static void main(String [] args){
// 把100~150之间不能被3整除的数输出,并且每行输出5个
int total = 0;
for(int i = 100;i<150;i++){
// 判断条件是否符合
if(i%3==0){
// 如果符合则直接跳过本次循环 继续下次循环
continue;
}
total++;
System.out.println(i+"\t");
}
System.out.println("能被3整除的数有"+total+"个");
// continue标签(类似于goto的作用)
outer:for(int i =0;i<10;i++){
for(int j = 0;j<10;j++){
if(j==8){
continue outer;// 跳至外层循环
}
}
}
}
}