人们说最好的程序员是懒惰的程序员。他不会多次执行相同类型的操作,而是会想出一种算法来为他完成这项工作。而且他会做得很好,这样就没有必要重做。 为了避免一遍又一遍地编写相同的代码,循环被发明了。假设我们需要将0到99的数字显示到控制台,没有循环的代码:
System.out.println(0);
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
// And so on
这段代码需要 100 行!很多。这是使用循环时的样子:
for(int i = 0; i < 100; i++) {
System.out.println(i);
}
只需3行!
什么是 for 循环?
for循环是一种程序代码的控制结构,它打破了算法执行的线性性,允许您多次执行指定的代码。例如,您需要服用30滴药。该算法将是这样的:- 准备一个玻璃杯。
- 打开盖子。
- 获取 1 滴。
- 获取 2 滴。 ...
- 获得30滴。
- 关闭药。
- 取出收到的部分。
- 准备一个玻璃杯。
- 打开滴水盖。
- 获取 30 滴。
- 关闭药。
- 取出收到的部分。
for 循环如何工作
for 循环的使用方式如下:for(<начальная точка>; <condition выхода>; <операторы счетчика>) {
// Loop body
}
Пример перебора цифр от 0 до 5 и вывод каждой в консоль:
for(int i = 0; i < 5; i++) {
System.out.println(i);
}
结论:
0
1
2
3
4
如果我们将此条目翻译成人类语言,我们会得到以下内容:“创建一个初始值为 0 的变量 i,直到达到 5,加 1,并在每一步将 i 的值写入控制台。” Java中的for循环基于三个阶段,可以用下图表示: 退出循环的条件是一个布尔表达式。如果为假,则循环结束。在上面的示例中,变量i
增加 1。如果其值小于 5,则循环继续。但一旦i
大于或等于5,循环就会停止。计数器运算符是对计数器变量执行转换的表达式。在上面的示例中,变量i
增加了 1。也就是说,循环将恰好执行 5 次。如果计数器运算符将 2 添加到变量i
,结果将会不同:
for(int i = 0; i < 5; i = i + 2) {
System.out.println(i);
}
结论:
0
2
4
您还可以对变量进行乘法、除法、求幂,一般来说,您可以做任何您想做的事情。最主要的是转换结果是一个数字。 循环体是任何可以执行的代码。在上面的示例中,循环体将变量 i 的值输出到控制台,但该循环体的内容受到任务和想象力的限制。总结整个方案,这个 for 循环的原理如下:在达到循环退出条件之前,循环体中的代码将被执行与计数器运算符执行的转换次数一样多的次数。如果将循环退出条件设置为true
:
for(int i = 0; true; i++) {
if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
那么循环之后的代码将被标记为错误unreachable statement
,因为它永远不会被执行。独创性挑战:运行下面的代码,Loop ended
控制台会输出“ ”还是会无限循环?
for(int i = 0; i > -1; i++) {
if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
答:会有的。变量i迟早会达到其最大值,进一步增加将使其变为最大负值,从而满足退出条件(i < = -1)。
forEach循环
使用循环时,有时必须迭代数组或集合。通常,您可以使用 for 循环遍历数组:public void printAllElements(String[] stringArray) {
for(int i = 0; i < stringArray.length; i++) {
System.out.println(stringArray[i]);
}
}
这是对的。然而,为了一一迭代数组的所有元素,他们提出了 forEach 结构。其签名如下:
for(<Тип element> <Name переменной, куда будет записан очередной элемент> : <Название массива>) {
// Loop body
}
您可以通过以下方式迭代字符串数组并将每个字符串打印到控制台:
public void printAllElements(String[] stringArray) {
for(String s : stringArray) {
System.out.println(s);
}
}
又短又简洁。最重要的是,不需要考虑计数器和退出条件,一切都已经为我们做好了。
如何使用 for 循环
现在让我们看几个在Java中使用for循环来解决各种问题的例子。逆循环(从大到小)
for(int i = 5; i > 0; i--) {
System.out.println(i);
}
结论:
5
4
3
2
1
循环体中的几个变量和递增计数器
您可以在 for 循环中使用多个变量,例如可以在 counter 语句中转换它们:int a = 0;
for(int i = 5; i > 0; i--, a++) {
System.out.print("Step: " + a + " Meaning: ");
System.out.println(i);
}
结论:
Шаг: 0 Значение: 5
Шаг: 1 Значение: 4
Шаг: 2 Значение: 3
Шаг: 3 Значение: 2
Шаг: 4 Значение: 1
或者声明两个变量并循环直到它们彼此相等:
for(int i = 5, j = 11; i != j; i++, j--) {
System.out.println("i: " + i + " j: " + j);
}
结论:
i: 5 j: 11
i: 6 j: 10
i: 7 j: 9
此操作不太可能有任何价值,但了解这种可能性很有用。您还可以在 for 循环内创建内部循环。在这种情况下,循环步骤数将成倍增加:
for(int i = 0; i < 5; i++) {
System.out.print(i + " | ");
for(int j = 0; j < 5; j++) {
System.out.print(j + " ");
}
System.out.print('\n');
}
结论:
0 | 0 1 2 3 4
1 | 0 1 2 3 4
2 | 0 1 2 3 4
3 | 0 1 2 3 4
4 | 0 1 2 3 4
在计数器循环中,j
可以访问外循环的计数器。这使得嵌套循环成为遍历二维、三维和其他数组的理想方式:
int[][] array = { {0, 1, 2, 3, 4 },
{1, 2, 3, 4, 5},
{2, 3, 4, 5, 6},
{3, 4, 5, 6, 7}};
for(int i = 0; i < array.length; i++) {
for(int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.print('\n');
}
结论:
0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
提前完成周期
如果在处理循环时需要中断循环,请使用运算符break
,它会停止循环的当前主体。所有后续迭代也将被跳过:
public void getFirstPosition(String[] stringArray, String element) {
for (int i = 0; i < stringArray.length; i++) {
if(stringArray[i].equals(element)) {
System.out.println(i);
break;
}
}
}
该方法将打印数组中第一个搜索元素的位置:
String[] array = {"one", "two", "three", "Jeronimo"};
getFirstPosition(array, "two");
结论:
1
无限循环
创建无限 for 循环的另一种方法是将计数器声明区域、退出条件和计数器语句留空:for (;;) {
}
但请记住,在大多数情况下,无限循环是逻辑错误的证据。这样的循环必须有退出条件。
GO TO FULL VERSION