我知道这似乎是一个绝对愚蠢的问题,但是我很好奇,不想问...
为什么“ i”和“ j”成为在大多数控制结构中用作计数器的变量?
尽管常识告诉我它们就像X一样,用于表示未知值,但我不禁要认为一定有一个原因,使得每个人都一遍又一遍地以相同的方式被教导。
是因为它实际上是为最佳做法或惯例而推荐的,还是它背后有些晦涩的原因?
以防万一,我知道我可以给他们我想要的任何名称,并且变量名称不相关。
我知道这似乎是一个绝对愚蠢的问题,但是我很好奇,不想问...
为什么“ i”和“ j”成为在大多数控制结构中用作计数器的变量?
尽管常识告诉我它们就像X一样,用于表示未知值,但我不禁要认为一定有一个原因,使得每个人都一遍又一遍地以相同的方式被教导。
是因为它实际上是为最佳做法或惯例而推荐的,还是它背后有些晦涩的原因?
以防万一,我知道我可以给他们我想要的任何名称,并且变量名称不相关。
Answers:
它最终来自数学:求和表示法传统上将i用于第一个索引,将j用于第二个索引,依此类推。示例(来自http://en.wikipedia.org/wiki/Summation):
它也用这种方式来收集事物,例如如果您有一堆变量x 1,x 2,... x n,则任意将被称为x i。
至于为什么会这样,我认为SLaks是正确的,这是因为我是Index中的第一个字母。
i
在数学中使用它?
我相信它可以追溯到Fortran。从I到Q开头的变量默认情况下为整数,其他为实数。这意味着它I
是第一个整数变量,J
第二个等等,因此它们不适合在循环中使用。
I
过N
没有Q
。谷歌似乎大都同意。(FORTRAN的不同版本?)
数学家早在(例如1836或1816)计算机出现之前(这是FORTRAN变量类型默认值的起源)就使用i,j,k在代数中指定整数(下标,系列,求和等)。从字母末尾(...,x,y,z)开始使用字母作为常量的习惯,从常量开始以(a,b,c ...)开始使用常量的习惯通常归因于Rene Descartes,也在这里),所以我认为整数的i,j,k ... n(在字母中间)也可能是由于他。
i =整数
来自Fortran,其中整数变量必须以字母I至N开头,而实数变量必须以其他字母开头。因此,我是第一个也是最短的整数变量名称。Fortran是被广泛使用的最早的编程语言之一,并且程序员使用它的习惯被移植到其他语言中。
编辑:我从数学得出的答案没有问题。毫无疑问,这就是Fortran设计师获得灵感的地方。无论如何,事实是,对我而言,当我开始在Fortran中编程时,我们将I,J,K,...用于循环计数器,因为它们很短,并且是第一个合法允许使用的变量名称,即整数。作为HS的大二学生,我可能听说过笛卡尔(以及其他少数人),但是在编程时与数学的联系很少。实际上,我修读的第一门课程叫做“ Fortran for Business”,不是由数学系教授的,而是由商业/经济系教授的。
至少对我而言,变量的命名与数学无关,但一切归因于我习惯于编写用其他语言编写的Fortran代码的习惯。
i
代表I ndex。
j
来了i
。
在数学中,偏爱将字母中的连续字母用于以类似方式使用的“匿名”变量。因此,不仅是“ i,j,k”,而且还有“ f,g,h”,“ p,q,r”,“ x,y,z”(很少带有“ u,v,w”),和“α,β,γ”。
现在,“ f,g,h”和“ x,y,z”不再自由使用:前者用于函数,后者用于维。“ p,q,r”也经常用于功能。
然后,在可用序列上还有其他限制:避免使用“ l”和“ o”,因为它们在许多字体中看起来像“ 1”和“ 0”。“ t”通常用于时间,“ d&δ”用于微分,“ a,s,m,v”用于加速度,位移,质量和速度的物理度量。这样就不会在没有连续索引的情况下在索引数学上造成不必要的联系而留下很多空白。
然后,正如其他一些人所注意到的那样,数学惯例对早期编程惯例有很大的影响,并且“α,β,γ”在许多早期字符集中都不可用。
a, b, c
尽管a
具有多种含义,它还是一个相当常用的序列...
我发现另一个可能的答案可能是i,j和k来自Hamilton's Quaternions
。
欧拉(Euler)为虚构单元选择了i。
汉密尔顿还需要-1的两个平方根:
ii = jj = kk = ijk = -1
汉密尔顿确实很有影响力,四元数是1900年之前进行3D分析的标准方法。那时,数学家习惯于将(ijk)视为匹配集。
矢量演算在1890年代取代了四元数分析,因为它是写麦克斯韦方程组的更好方法。但是人们倾向于这样写向量:(3i-2j+k)
而不是 (3,-2,1)
。因此(ijk)成为R ^ 3中的标准基向量。
最后,物理学家开始使用群论来描述微分方程系统中的对称性。因此(ijk)开始表示“被置换组交换的向量”,然后转向“采用索引的事物,这些事物在某些指定集中具有所有可能的值” ,这基本上就是for循环的含义。
通过丢弃(有点偏见)
a seems an array
b seems another array
c seems a language name
d seems another language name
e seems exception
f looks bad in combination with "for" (for f, a pickup?)
g seems g force
h seems height
i seems an index
j seems i (another index)
k seems a constant k
l seems a number one (1)
m seems a matrix
n seems a node
o seems an output
p sounds like a pointer
q seems a queue
r seems a return value
s seems a string
t looks like time
u reserved for UVW mapping or electic phase
v reserved for UVW mapping or electic phase or a vector
w reserved for UVW mapping or electic phase or a weight
x seems an axis (or an unknown variable)
y seems an axis
z seems a third axis
number
,通常是集合中元素的数量。
一个阳光明媚的下午,阿基米德沉思了一下(像往常一样阳光明媚的下午),遇到了他的好友Eratosthenes。
阿基米德说:“阿基米德人向Eratosthenes致意!我正在尝试解决平衡状态下几个球形刚体的比率。我希望多次遍历这些刚体,但我一直在紧张地追踪时间我完成了多少次迭代!”
Eratosthenes说:“为什么阿基米德,你是个开玩笑的成熟李子,你只能在沙滩上标记连续的行,每行都记录你在一次迭代中完成的迭代次数!”
阿基米德向世人大声疾呼,他的好朋友无可否认是提出这样一个简单解决方案的智慧的灯塔。但是阿基米德说,他喜欢沉思时喜欢在沙坑周围转圈。因此,存在丢失跟踪哪一行在顶部,哪一行在底部的风险。
“也许我应该在侧面上用字母标记这些行,以便我将始终知道哪一行是哪一行?您对此有何看法?” 他问,然后补充道:“但是Eratosthenes ...我该用什么字母?”
Eratosthenes确信他不知道哪个字母是最好的,于是对阿基米德说了很多。但是阿基米德并不满意,并继续敦促这位可怜的图书管理员至少选择他要为当前球体平衡解决方案所需的两个字母。
Eratosthenes终于厌倦了不断要求两个字母的声音,大喊:“我只是不知道!!!”
因此,阿基米德选择了Eratosthenes感叹词中的前两个字母,并感谢他的朋友的贡献。
这些符号被古希腊Java开发人员迅速采用,其余的都是…历史。
j
。
我认为这是因为很多循环使用Int类型变量进行计数,例如
for (int i = 0; etc
当您打字时,您实际上会在脑海中说出来(就像阅读时一样),因此在您的脑海中,您会说“ int ....”
当您必须在“ int ....”之后写一个字母时,您说/输入“ i”,因为这是您刚刚说出“ int”时想到的第一个字母
就像您向开始学习阅读的孩子拼写单词一样,您可以使用名称来拼写单词,例如:
单词拼写William W,Ok O,Ruby R,Done D
所以您说第一个字母为Int I,Double d,Float f,string s等。
使用j是因为完成int I后,J紧随其后。
i
在此语法之前。
i = iota,j =记号;两者都是小的变化。
iota是希腊字母中最小的字母;在英语中,它的含义与微小的变化相关,例如“没有一个iota”(摘自《新约》中的一句话:“直到天堂和大地逝去,没有一个iota,不是一个点,才会从法律中消失”) (太5:18))。
计数器代表值的微小变化。
joot(iot)来自于iota,这也是小改变的代名词。
计数器在程序中是如此普遍,在计算的早期,一切都非常宝贵……
程序员自然地尝试保存像素,并且“ i”所需要的像素少于其他任何字母。(数学家们很懒,出于同样的原因选择了它-因为它是最小的字形)。
如前所述,“ j”自然而然地...
:)