写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成,愿将昔日所获与大家交流一二,希望对学习路上的你有所助益。同时,博主也想通过此次尝试打造一个完善的技术图书馆,任何与文章技术点有关的异常、错误、注意事项均会在末尾列出,欢迎大家通过各种方式提供素材。
本文关键字:基本结构、循环结构、while、do-while、for
为了讲解方便,我们可以将循环结构划分为四个部分来进行描述。当然,这四个部分并不是都要出现,甚至在都不出现时也可以构成一个循环结构。并且,对于不同的循环结构,每个部分的相对位置也不同。
在进入循环结构之前可以定义一些循环中以及循环结束后都要用到的变量,进行赋值。
用于决定是否继续进行循环,如果为假,则循环结束。判断部分可以直接使用一个布尔类型的变量,或者使用表达式,但是必须保证表达式的结果为布尔类型。
循环结构的核心部分,用于书写每次想要重复执行的代码,通常要根据程序功能来设计。
用于辅助控制循环的结束,在循环体之后执行,如变量自增等。
与判断结构类似,当不使用大括号时,循环结构只能控制一行代码,通常我们会添加大括号
[初始化部分]
while(条件判断部分){
循环体
[迭代部分]
}
对于while循环,通常用于循环次数不确定时,如:让使用者决定什么时候退出循环。
public static void main(String[] args){
// 初始化部分
int i = 1;
// 括号中为循环继续执行的条件:当i的值小于等于9时
while(i <= 9){
// 循环体部分
System.out.println(i);
// 迭代部分:辅助控制循环结束或根据循环体的需要来写
i++;
}
}
import java.util.Scanner;
import java.util.Random;
public class Test{
public static void main(String[] args){
// 初始化Scanner,用于从键盘读入数据
Scanner sc = new Scanner(System.in);
// 初始化随机数生成工具
Random random = new Random();
// 随机生成一个0~99的整数
int n = random.nextInt(100);
// 定义一个布尔类型的变量,用于控制循环的结束
boolean flag = true;
// 使用flag作为控制循环结束的变量
while(flag){
System.out.println("请输入一个数:");
// 从键盘读取一个数
int temp = sc.nextInt();
// 判断输入的数是否与随机数相同,猜中则退出
if(temp == n){
System.out.println("猜中了!");
// 修改flag为false,使得循环退出
flag = false;
}else{
// 如果没有猜中,就让用户自己决定是不是要继续猜
System.out.println("猜错了!还要继续吗?1:继续2:退出");
// 如果输入的数字为2则退出(此处暂不考虑输入出错等其他情况)
if(sc.nextInt() == 2){
// 修改flag为false,使得循环退出
flag = false;
}
}
}
// 使用后关闭
sc.close();
}
}
[初始化部分]
do{
循环体
[迭代部分]
}while(条件判断部分);
do-while循环与while循环的用法基本相同,主要的不同点在于循环体(迭代部分)一定会先执行一次,然后再进行判断,这非常适合在初学时做成菜单程序。
break只能跳出离自己最近一层的switch-case或循环结构,如果想直接跳出指定层的循环,需要使用到自定义标签。自定义标签的用法比较简单,直接在一个循环结构的起始位置加一个单词,配合冒号使用,在进行跳出时,可以在break后面添加自定义标签的名称,即可跳出指定层的循环。
import java.util.Scanner;
public class Test{
public static void main(String[] args){
// 初始化Scanner,用于从键盘读入数据
Scanner sc = new Scanner(System.in);
// 在此处使用自定义标签out(名称可以自定义)来进行标记
out:do{
System.out.println("****欢迎使用xxx系统****");
System.out.println("****1.系统功能一*******");
System.out.println("****2.系统功能二*******");
System.out.println("****3.退出系统*********");
System.out.print("请输入功能选项:");
// 从键盘读入一个数选择要执行的功能
int select = sc.nextInt();
switch(select){
case 1:
// 功能一相关代码
break;
case 2:
// 功能二相关代码
break;
case 3:
// 指定跳出外层的do-while循环,否则只能跳出当前的switch-case结构
break out;
}
// 判断条件一直为真,除非用户输入选项3退出系统,则使用break跳出。
}while(true);
// 使用后关闭
sc.close();
}
}
for(初始化部分;条件判断部分;迭代部分){
循环体
}
for循环主要用于循环次数确定的情况,通常使用break直接跳出循环是由于已经完成了所需工作,终止剩余无用循环以提高程序运行效率。
public static void main(String[] args){
// 定义一个整数类型变量,用于记录结果
int sum = 0;
for(int i = 1;i <= 10;i++){
// 根据逻辑,将每次得到的值相加
sum += i;
}
// 输出计算结果
System.out.println(sum);
}
public static void main(String[] args){
for(int i = 0;i <= 100;i++){
// 判断当前数字的奇偶性,如果是奇数则跳过输出语句
if(i % 2 != 0){
// 如果是奇数,将跳过循环体剩余的部分,迭代部分不受影响
continue;
}
System.out.println(i);
}
// 输出计算结果
System.out.println(sum);
}
死循环的出现是由于我们没有正确的指定循环的终止条件和控制相关的变量,导致判断条件部分一直为真,使得循环结构无法结束。但有些时候根据功能需要我们会手动先构造一个死循环,然后使用break来进行跳出,如:菜单程序,由用户来决定什么时候结束,进行循环的跳出。手动构建一个死循环十分简单,但是如果意外的出现死循环就需要优先检查条件判断部分以及相关变量的变化了。
while(true){
循环体
}
do{
循环体
}while(true)
// 是的,你没有看错,所有的部分都不需要填写,但是分号不能省略
for(;;){
循环体
}
Java程序设计的基本结构
Java小白修炼手册