Car*_*los 179 language-agnostic variables
我知道这可能看起来像是一个绝对愚蠢的问题,但我太好奇了,不要问......
为什么"i"和"j"成为大多数控制结构中用作计数器的变量?
虽然常识告诉我它们就像X,它用于表示未知的值,但我不禁认为必须有一个理由为什么每个人都一遍又一遍地以相同的方式进行教学.
是因为它实际上被推荐用于最佳实践或惯例,还是它背后有一些模糊的原因?
为了以防万一,我知道我可以给他们任何我想要的名字,并且变量名称不相关.
zwo*_*wol 330
它最终来自数学:求和符号传统上使用i作为第一个索引,j作为第二个索引,依此类推.示例(来自http://en.wikipedia.org/wiki/Summation):
它也以这种方式用于收集事物,例如,如果你有一堆变量x 1,x 2,... x n,那么任意一个将被称为x i.
至于为什么会这样,我想SLaks是正确的,这是因为我是索引中的第一个字母.
Ign*_*ams 200
我相信它可以追溯到Fortran.从I到Q开始的变量默认是整数,其他是真实的.这意味着它I是第一个整数变量,J第二个等等,所以它们在循环中使用.
tim*_*day 195
数学家们使用i,j,k在代数(下标,序列,求和等)之前很久就指定了整数(例如1836或1816年)计算机(这是FORTRAN变量类型默认值的起源).使用字母表中的字母(...,x,y,z)表示未知变量的习惯以及从一开始(a,b,c ...)表示常量的习惯通常归因于Rene Descartes,(见也在这里)所以我假设整数的i,j,k ... n(在字母表中间)可能也是由于他.
tva*_*son 129
i =整数
来自Fortran,其中整数变量必须以字母I到N开头,而实数变量以其他字母开头.因此,我是第一个也是最短的整数变量名.Fortran是最早使用的编程语言之一,程序员使用它编写的习惯转移到其他语言.
编辑:我对它来自数学的答案没有任何问题.毫无疑问,这是Fortran设计师获得灵感的地方.事实上,对我来说,无论如何,当我开始在Fortran中编程时,我们使用I,J,K,...用于循环计数器,因为它们很短并且是第一个合法允许的整数变量名.作为HS的二年级学生,我可能听说过笛卡尔(以及其他一些人),但在编程时与数学的联系却很少.事实上,我参加的第一门课程被称为"商业Fortran",并不是由数学系教师,而是由商业/经济学教授.
对我来说,至少,变量的命名与数学没什么关系,但是由于我习惯于编写Fortran代码而习惯于其他语言.
SLa*_*aks 91
i代表我 ndex.
j来之后i.
Cha*_*art 47
在数学中有一种偏好,即在字母表中使用类似方式使用的"匿名"变量的连续字母.因此,不仅仅是"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"用于加速度,位移,质量和速度的物理测量.这留下了三个连续字母之间没有那么多的空白而没有不必要的数学关联指数.
然后,正如其他几个人所注意到的那样,来自数学的约定对早期编程惯例有很大的影响,并且"α,β,γ"在许多早期字符集中都不可用.
Car*_*los 32
我找到了另一个可能的答案,可能是i,j和k来自Hamilton's Quaternions.

欧拉选择我作为想象单位.
汉密尔顿还需要两个-1的平方根:
ii = jj = kk = ijk = -1
汉密尔顿确实很有影响力,四元数是1900年之前进行3D分析的标准方法.到那时,数学家习惯于将(ijk)视为匹配集.
矢量微积分在19世纪90年代取代了四元数分析,因为它是编写麦克斯韦方程的更好方法.但是人们倾向于像这样写出矢量:(3i-2j+k) 而不是 (3,-2,1).因此(ijk)成为R ^ 3中的标准基矢量.
最后,物理学家开始使用群论来描述微分方程系统中的对称性.所以(ijk)开始意味着"被排列组交换的向量",然后转向"类似索引的事物,这些事物在某些指定的集合中具有所有可能的值" ,这基本上是它们在for循环中的意思.
Her*_*che 30
丢弃(略有偏见)
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
Run Code Online (Sandbox Code Playgroud)
i seems an index
j seems i (another index)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
Bre*_*dan 21
一个阳光明媚的下午,阿基米德有什么思考(正如平时下午的平常)并遇到他的伙伴Eratosthenes.
阿基米德说,"阿基米德向Eratosthenes问候!我正在努力想出一个解决几个球状刚体平衡比例的方法.我希望多次迭代这些身体,但我有一个可怕的时间保持跟踪我完成了多少次迭代!"
Eratosthenes说:"为什么阿基米德,你成熟的梅花,你只能在沙子中标记连续的行,每个都跟踪你在迭代中完成的迭代次数!"
阿基米德向世界喊道,他的好朋友无疑是一个闪亮的智慧灯塔,可以提出如此简单的解决方案.但阿基米德说,他喜欢在思考时在他的沙坑周围走来走去.因此,有可能失去追踪哪一排在顶部,哪一排在底部.
"也许我应该用字母表中的字母标记这些行,以便我总是知道哪一行是哪个!你怎么想到这个?" 他问道,然后补充道,"但是Eratosthenes ......我会用什么字母?"
Eratosthenes确信他不知道哪些字母最好,并且对阿基米德说了很多.但阿基米德并不满意,并继续敦促贫穷的图书管理员至少选择他目前的球体均衡解决方案所要求的两封信.
Eratosthenes终于厌倦了两封信的不断要求,喊道,"我只是不知道!!!"
所以阿基米德选择了Eratosthenes的感叹句中的前两个字母,并感谢他的朋友的贡献.
古希腊Java开发人员很快就采用了这些符号,剩下的就是......历史.
Mic*_*hel 15
我认为这是因为很多循环使用Int类型变量进行计数,比如
for (int i = 0; etc
Run Code Online (Sandbox Code Playgroud)
当你打字的时候,你实际上是在脑海中说出来(就像你读的那样),所以在你的脑海中,你会说'int ....'
当你必须在'int ....'后面写一个字母时,你说/输入'i',因为这是你刚才说'int'时你想到的第一个字母
就像你给那些开始学习阅读的孩子拼写一个单词一样,你可以使用名字为他们拼写单词,如下所示:
WORD拼写William W,Ok O,Ruby R,Done D.
所以你根据第一个字母说Int I,Double d,Float f,string s等.
使用j是因为当你完成int I时,J紧随其后.
Ale*_*all 14
我认为这是其他提到的原因的组合:
对于初学者来说,数学家常常使用'i'作为他们的符号,并且在使用非二进制语言(即必须以某种方式解析和调用)的计算的早期阶段,绝大多数计算机用户都是还有数学家(......以及科学家和工程师)因此这种符号在计算机语言中用于编程循环,并且从那时起就一直存在.
结合这一事实,在那些早期的屏幕空间非常有限,就像记忆一样,保留较短的变量名称是有意义的.
小智 13
可能历史?
FORTRAN,可以说是第一个高级语言,默认情况下将i,j,k,l,m定义为Integer数据类型,并且循环只能由整数变量控制,约定会继续吗?
例如:
做100 i = j,100,5 ...... 100继续....
Chr*_*ann 13
i =迭代器,i =索引,i =整数
你认为"i"代表它仍然"适合法案".
此外,除非在该循环中只有一行代码,否则您应该将iterator/index/integer变量命名为更有意义的变量.喜欢:employeeIndex
顺便说一句,我通常在我的简单迭代器循环中使用"i"; 除非它当然包含多行代码.
小智 13
i = iota,j = jot; 两个小变化.
iota是希腊字母表中最小的字母; 在英语中,它的含义与微小的变化有关,如"不是一个iota"(来自新约中的一句话:"直到天地消逝,而不是iota,而不是一个点,将从法律中消失" (太5:18)).
计数器表示值的微小变化.
而iota来自jot(iot),这也是一个小变化的代名词.
比照 http://en.wikipedia.org/wiki/Iota
MaD*_*Mad 13
好吧从数学:(拉丁字母)
a,b:用作有理数的常数或整数
c:常数
d:导数
e:欧拉数
f,g,h:函数
i,j,k:是索引(也是单位向量和四元数)
l:一般不使用.看起来像1
米,n:是矩阵的行和列,或者是有理数的整数
o:也没用过(除非你是小符号)
p,q:经常用作素数
r:有时变量的空间变化与素数
s 相关的其他时间,t:空间和时间变量或s用作t
u,v,w的变量变量:变量
x,y,z的变化:变量
tow*_*owi 11
我想有很多可能的主要原因:
i和j对自然数的公式(使用那些复杂的数字很少,至少)所以这结转到编程i暗示int.如果你需要另一个,int那就i2太长了,所以你决定使用j.i然后是integer.小智 7
它绝对来自数学,它早于计算机编程.
那么,如果来自数学呢?我完全没有受过教育的猜测是,正如一位同事所说,数学家喜欢使用字母簇来表示类似的事物 - f,g,h用于函数; x,y,z表示数值变量; p,q,r表示逻辑变量; u,v,w用于其他变量集,特别是在微积分中; a,b,c用于很多事情.i,j,k对于迭代变量来说非常方便,而且大概耗尽了可能性.为什么不是m,n?好吧,它们用于整数,但更常用于迭代的终点而不是迭代变量本身.
有人应该问一位数学史家.
计数器在程序中非常常见,在计算的早期,一切都非常珍贵......
程序员自然而然地试图保存像素,并且'i'所需的像素比其他任何字母都要少.(数学家,懒惰,因为同样的原因选择它 - 作为最小的字形).
如前所述,'j'自然而然地跟着......
:)