for循环中条件(condition)为空的含义和用法 int i = 0 i++(扔鸡蛋算法)

以Java为例,有时候在代码中我们会看到如下类型的for循环代码

public int forLoop(int n){
	for (int i = 1; ; i++) {
		ans += (long) i;
	    if (ans >= (long)n) {
	    	return i;
	    }
	 }
}

首先看一下java for循环的基本概念:

for (statement 1; statement 2; statement 3) {
  // code block to be executed
 }
 
Statement 1 is executed (one time) before the execution of the code block.

Statement 2 defines the condition for executing the code block.

Statement 3 is executed (every time) after the code block has been executed.

这种写法表明for循环的条件语句为空, 也就是说没有条件限制, for循环可以“无限”执行,
这样一来这个函数forLoop也不会被强制要求在整个for循环结束后return 一个int了,因为它本身可能是“无限”的。

接下来我们看看正常情况下如果不希望for循环“无限”执行,上面这个函数该怎么写:

public int forLoop(int n){
	for (int i = 1; i <= n; i++) {
		ans += (long) i;
	    if (ans >= (long)n) {
	    	return i;
	    }
	 }
	 return -1; //如果for循环设置了条件,这里就必须返回一个int才行,否则会报错
}

喜欢算法的朋友们可能已经看出来这段代码其实就是经典的“扔鸡蛋”问题的归纳法解法了。作者本身也在学习编程,讲解的不对的地方欢迎大家指正~

### 回答1: 这段代码存在一个语法错误,循环条件应该是i < 10,而不是i <= 10。 当循环变量i等于10时,条件i <= 10仍然满足,循环将继续执行一次,此时会访问数组arr10的第11个元素,即arr10[10],从而导致数组越界,产生未定义的行为。 因此,应该将代码修改为: ``` int arr10[10]; for (int i = 0; i < 10; i++) { arr10[i] = i; } ``` 这将使用循环变量i依次遍历数组arr10的每个元素,并将其赋值为i的值,从而实现为数组赋初值的目的。 ### 回答2: 这段代码是一个简单的C++程序,主要实现的功能是给一个长度为10的整型数组赋值。 首先定义了一个名为arr10的整型数组,数组的长度为10。然后使用for循环遍历数组的每个元素。 for循环的控制变量是int类型的变量i,初始值为0。循环条件是i小于等于10,即执行循环体的条件是i的值小于等于10。 在每次循环,将i的值赋给arr10数组对应的元素。由于数组的下标从0开始,所以第一个元素的下标是0,第二个元素的下标是1,以此类推,第十个元素的下标是9。因此,arr10[i] = i; 这行代码的作用是将i的值赋给数组的第i个元素。 最后,每次循环结束,i的值会递增1,直到i等于10时,循环结束。 这段代码的功能是给数组arr10的每个元素赋值为其对应的下标值,即第一个元素为0,第二个元素为1,以此类推,最后一个元素为9。 ### 回答3: 代码int arr10[10]声明了一个名为arr10的整型数组,数组的大小为10个元素。 for循环的语法是for(initialization; condition; increment/decrement),其initalization表示初始化一个变量,condition表示条件,increment/decrement表示循环每一次变量的变化。 在这个代码,for循环的初始化部分是int i = 0,表示初始化一个整型变量i,并将它的值初始化为0。 循环条件部分是i <= 10,表示当i的值小于等于10时继续循环循环的变化部分是i++,表示每一次循环i的值增加1。 在循环体内部,arr10[i] = i将数组arr10的第i个元素的值设置为i。 综上所述,该代码的功能是通过for循环将数组arr10的每个元素的值设置为其下标值,也就是从0到9。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值