为什么用uint8_t
而不是{ {1}}
最初编写代码时,我告诉for循环遍历数组的长度。我将for循环定义为c = 1ULL * a * b * d
。这就造成了无限循环。解决该问题的方法是设置i<array.length
。但是,有人可以向我解释为什么吗?感觉好像循环应该继续到数组的末尾。如果我将其设置为小于数组的长度,怎么知道它已经检查了所有数字?
谢谢!
注意:这是我的代码。
i=array.length
答案 0 :(得分:1)
如果您写i=array.length
,则将长度设置为i
-不比较(始终为true(或强制为true-除非数字为零),要比较,您需要写{{1 }}或i!=array.length
。第二件事,如果您使用i!==array.length
作为索引,那么最好使用i
,因为数组元素是从i<array.length
索引到0
并赋值我等长的会更长一些
length-1
答案 1 :(得分:1)
因为
for (i = 0; i < array.length; i++)
表示:
i = 0
我从for-loop
的开头开始
i < array.length
,只要i
小于array.length,我们就会继续循环播放
i++
在每个循环之后,我们将i加1(即i = i + 1)
将i < array.length
替换为i = array.length
时,您说的是let i = array.length
,它将值i
设置为array.length
。只要该语句为真,它将继续循环。这就是为什么它是一个无限循环。
但是我想那是一个错字,您的意思是i == array.length
。仍然不起作用,因为所有数组都从索引0开始(这就是i = 0
开始的原因)。这意味着它们以array.length - 1
的索引结尾。
示例:
arr = ["a","b","c"]; //arr[2] = "c", but arr.length = 3
因此,如果我们遍历arr
,我们需要在索引2
而不是3
处停止
答案 2 :(得分:0)
for
中的第二个参数定义循环继续/停止的条件。 i<array.length
正确的原因是javascript中的数组基于0。因此,如果您尝试获取array[array.length]
,那么它就超出了定义
答案 3 :(得分:0)
设置i=array.length
时,循环条件将评估i
中的内容。如果数组的长度大于0,则它将是真实值,从而导致无限循环。如果为0,则循环体(语句)将不会执行。
您正在覆盖步骤变量或迭代器变量i
,这不是您想要执行的操作。如果可以,您可以:
for (var i=0,n=array.length; i<n; i++)
;但是,将数组长度存储在变量中对于性能优化不再是必需的(我认为浏览器现在可以在将JS转换为字节码时进行优化。
有关更多信息,请参见MDN resource on for-loops;这是一个片段:
for ([initialization]; [condition]; [final-expression]) statement
初始化
表达式(包括赋值表达式)或变量声明。通常用于初始化计数器变量。该表达式可以选择使用var或let关键字声明新变量。用var声明的变量不是循环的局部变量,即它们与for循环所处的作用域相同。用let声明的变量是语句的局部变量。
该表达式的结果将被丢弃。
条件
在每次循环迭代之前要求值的表达式。如果此表达式的值为true,则执行语句。此条件测试是可选的。如果省略,则条件始终为true。如果该表达式的计算结果为false,则执行将跳至for构造之后的第一个表达式。
final-expression
在每次循环迭代结束时要评估的表达式。这发生在下一次条件评估之前。通常用于更新或递增计数器变量。
声明
只要条件的计算结果为true,就会执行该语句。要在循环中执行多个语句,请使用block语句({...})对这些语句进行分组。要在循环内不执行任何语句,请使用空语句(;)。