1.语法
for循环的基本语法如下:
for(①.声明并初始化循环变量;②.判断循环条件;④.改变循环变量值){
//③.循环体
}
语法说明:
1.for循环最先执行初始化步骤。在这里可以声明一种类型,但可以初始化一个或多个循环控制变量,也可以是空语句;
2.判断循环条件,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。且for循环的执行次数在执行前就已经是确定的。
3.执行一次循环后,就会更新一次循环控制变量的值;
4.再次检测布尔表达式,循环执行上面的过程。
2. 执行流程
根据上面的for循环语法,壹哥把for循环的执行流程给大家做个详细的解释:
1.首先我们要在第①步声明并初始化一个变量,该操作在循环中只会执行一次;
2.每次循环之前,在第②步判断循环条件是否成立,只有当条件为true才会执行,如果条件为false则结束循环;
3.每次循环时,都会在③中执行循环体内的代码;
4.每次循环结束后,会自动执行第④部分,改变变量的初始值;
5.for循环中①、②、④部分都可以省略不写,但必须存在两个”分号;“,也可以只写一部分;
6.我们声明变量类型时,不一定非得是int,最后改变初始值也不一定非得是++;
7.for循环中支持嵌套循环。
根据上面的步骤,壹哥把重点步骤给大家总结如下:
①-->②-->③-->④-->②-->③-->④-->②-->③-->④-.....-②
如下图所示:
2.for循环的几种写法
2.1 基本for循环
基本for循环包括三个部分:循环变量初始化、循环条件判断和循环变量更新。通常的形式如下:
for (int i = 0; i < n; i++) {
// 循环体
}
其中,i 是循环变量,n 是循环次数,循环体是需要重复执行的代码。
2.2 foreach循环
foreach循环通常用于遍历数组或集合中的元素。它的语法形式为:
for (类型 变量名 : 数组名) {
// 循环体
}
其中,类型 是数组或集合中元素的数据类型,变量名 是循环变量的名称,数组名 是需要遍历的数组或集合的名称。循环体是需要重复执行的代码。
例如,遍历一个整型数组的方式如下:
int[] nums = {1, 2, 3, 4, 5};
for (int num : nums) {
System.out.println(num);
}
2.3 while循环
while循环会在满足循环条件时重复执行代码块。它的语法形式为:
while (循环条件) {
// 循环体
}
其中,循环条件 是需要满足的条件,循环体是需要重复执行的代码。
例如,一个简单的while循环如下所示:
int i = 0;
while (i < 10) {
System.out.println(i);
i++;
}
这个while循环会不断地打印变量i的值,直到i的值达到10为止。
2.4 do-while循环
do-while循环与while循环类似,但它会先执行一次循环体,然后再检查循环条件。它的语法形式为:
do {
// 循环体
} while (循环条件);
其中,循环体 是需要重复执行的代码,循环条件 是需要满足的条件。
例如,一个简单的do-while循环如下所示:
int i = 0;
do {
System.out.println(i);
i++;
} while (i < 10);
这个do-while循环会先打印变量i的值为0,然后将i的值加1,并检查i是否小于10,如果满足则再次执行循环体。这个循环会执行10次,因为在第10次执行时,i的值为9,不再小于10。
2.5 简写形式
在for循行中,第①/②/④这几部分的内容都是可以省略简写的。
public class Demo02 {
public static void main(String[] args) {
//简写形式1:在第一部分中简写变量的声明
//int i = 0;
//for (; i < 100; i++) {
// System.out.println("小白学java,i=" + i);
//}
//简写形式2:在第①和④中简写
//int i = 0;
//for ( ; i < 100; ) {
// i++;
// System.out.println("小白学java,i=" + i);
//}
//简写形式3,①/②/④都简写--->死循环
int i = 0;
for (;;) {
i++;
System.out.println("小白学java,i=" + i);
}
}
}
我们一定要注意,如果是第三种简写形式,把①/②/④都简写了,就会成为死循环,本段程序会一直不停地打印下去。此时我们可以点击控制台的”红色“按钮停止程序的运行
3.for循环语句的用法
需求:循环输出100遍 ”小白学java“
public class ForDemo {
public static void main(String[] args) {
//for循环,这里的i就是一个局部变量
for( int i=0; i<100; i++) {
System.out.println("小白学java,i="+i);
}
}
}
注意,上面for循环中定义的变量i就是一个局部变量哦!
需求:计算1-100的和,1+2+3+4+5+...+100
public class ForDemo02 {
public static void main(String[] args) {
// 计算1-100的和,1+2+3+4+5+...+100
//定义一个用于存储”和“的局部变量
int sum = 0;
for (int i = 1; i <= 100; i++) {
// i = 1;
// sum=0+1;
// i = 2;
// sum= 1+2;
sum = sum + i;
}
System.out.println("sum=" + sum);
}
}
需求:打印出一个三角形,用“*”来表示。
public class ForDemo03 {
public static void main(String[] args) {
// for循环嵌套--打印出一个三角形,用“*”来表示
for (int i = 1; i <= 5; i++) {
//定义第2个局部变量j,j设置为<=i
for (int j = 1; j <= i; j++) {
//这里千万不要换行哦
System.out.print(" * ");
}
//这里一定要换行哦
System.out.println();
}
}
}
需求:使用for循环产生20个1-100的随机数,且这20个数互不相同:
import java.util.Random;
public class ForDemo03 {
public static void main(String[] args) {
int[] randomNumbers = new int[20];
Random random = new Random();
for (int i = 0; i < randomNumbers.length; i++) {
int newNumber;
boolean numberExists;
do {
newNumber = random.nextInt(100) + 1;
numberExists = false;
for (int j = 0; j < i; j++) {
if (randomNumbers[j] == newNumber) {
numberExists = true;
break;
}
}
} while (numberExists);
randomNumbers[i] = newNumber;
System.out.println(randomNumbers[i]);
}
}
}
注意:在上面的代码中,我们使用了一个do-while循环,每次生成一个新的随机数并检查它是否已经存在于数组中。如果已经存在,则继续生成新的随机数,直到找到一个不存在于数组中的随机数。然后将该随机数存储在数组中,并输出到控制台。
需求:打印出九九乘法表。
public class Demo02 {
public static void main(String[] args) {
// for循环嵌套--打印出一个三角形,用“*”来表示
for (int i = 1; i <= 5; i++) {
//定义第2个局部变量j,j设置为<=i
for (int j = 1; j <= i; j++) {
//这里千万不要换行哦
System.out.print(" * ");
}
//这里一定要换行哦
System.out.println();
}
}
}
经常有朋友问:java循环长度的相同、循环体代码相同的两次for循环的执行时间相差了100倍这是为什么?
在这里给大家总结几种情况:大家可以学习参考下:
1.编译器优化:Java编译器在编译代码时会进行一些优化,例如将代码重构为更高效的形式,消除无用代码等等。这些优化可能会使一个循环比另一个循环更快速地执行。
2.缓存:在循环执行期间,CPU会从内存中读取数据并将其缓存在缓存中。如果两个循环访问的数据不同,或者访问数据的方式不同,缓存效率可能会受到影响,从而导致执行时间的差异。
3.硬件差异:执行时间的差异也可能是由于硬件差异引起的,例如不同的CPU或内存速度。
4.其他因素:还有一些其他因素可能导致执行时间的差异,例如操作系统负载、线程竞争等等。
要确定造成执行时间差异的具体原因,可以使用性能分析工具来分析代码的执行情况,例如VisualVM或Eclipse Memory Analyzer。这些工具可以帮助您确定循环中的瓶颈,并提供优化建议,以改善代码的性能。