为什么要使用 for 循环
Java 中有三种主要的循环结构:while 循环、do…while 循环、for 循环。
虽然所有循环结构都可以用 while 或者 do…while 表示,但 Java 提供的 for 循环,使一些循环结构变得更加简单。
比如我们要实现变量 x 从 0 增加到 10 ,while 循环的实现方式如下:
class Test {
public static void main(String[] args) {
int x = 0;
while(x < 10){
x++;
System.out.println(x);
}
}
}
通过 for 循环的实现方式更加简单:
class Test {
public static void main(String[] args) {
for( int x = 0; x < 10; x++){
System.out.println(x);
}
}
}
同样的,在 Python3 中,通过 for 循环也能使得代码更为简洁。
JAVA 与 Python3 中 for 循环语句在功能上的区别
JAVA 中 for 循环语句的一般形式为:
for(初始化; 布尔表达式; 更新) {
//代码语句
}
而在 Python3 中 for 循环语句的一般形式为:
for <variable> in <sequence>:
<statements>
else:
<statements>
可见 Python3 中的 for 循环在形式上更加简单,但这也导致了其功能不如 JAVA 中的 for 循环强大。比如,我想要实现插入排序,在 JAVA 中可以采用如下代码:
// 方法一
public class Soultion{
public int[] sortArray(int[] nums){
int len = nums.length;
for(int i = 1; i < len; i++){
for(int j = i; j > 0; j--){
if(nums[j - 1] > nums[j]){
swap(nums, j - 1, j);
}else{ // 正是因为插入排序有机会提前结束内层循环,所以一般比选择排序和冒泡排序更高效
break;
}
}
}
return nums;
}
private void swap(int[] nums, int index1, int index2){
int temp = nums[index1];
nums[index1] = nums[index2];
nums[index2] = temp;
}
}
我们对代码进行进一步优化,使得代码变得更加简洁:
// 方法二
public class Soultion{
public int[] sortArray(int[] nums){
int len = nums.length;
for(int i = 1; i < len; i++){
// --------------这部分是修改的地方--------------------------------
// 相当于将之前的 if...else 语句嵌入到了内层 for 循环之中
for(int j = i; j > 0 && nums[j - 1] > nums[j]; j--){
swap(nums, j - 1, j);
}
// -------------------------------------------------------------
}
return nums;
}
private void swap(int[] nums, int index1, int index2){
int temp = nums[index1];
nums[index1] = nums[index2];
nums[index2] = temp;
}
}
同样是为了实现插入排序算法,在 Python3 中,由于没有一个显示的布尔表达式,因此我们不能像上面方法二一样做代码的简化。
参考:
- https://www.runoob.com/java/java-loop.html
- https://www.runoob.com/python3/python3-loop.html
- https://www.bilibili.com/video/BV1y44y1q7MJ?p=7