Re: For Loop and Array related

*To*: mathgroup at smc.vnet.net*Subject*: [mg57999] Re: [mg57971] For Loop and Array related*From*: "David Park" <djmp at earthlink.net>*Date*: Thu, 16 Jun 2005 05:35:56 -0400 (EDT)*Sender*: owner-wri-mathgroup at wolfram.com

I don't understand that. Switching to a simpler Do statement, note that the following does not work. Lattice = Table[0, {n, 100}]; Do[Lattice[[Random[Integer, {1, 100}]]]++, {16000}] Total[Lattice] 16229 But if we calculate the index location first it does work. Lattice = Table[0, {n, 100}]; Do[i = Random[Integer, {1, 100}]; Lattice[[i]]++, {16000}] Total[Lattice] 16000 If we do a Trace on the increment statement in the first construction we obtain the following... Lattice = Table[0, {n, 5}]; Trace[Lattice[[Random[Integer, {1, 5}]]]++] Lattice {HoldForm[Lattice[[Random[Integer, {1, 5}]]]++], {{HoldForm[Lattice], HoldForm[{0, 0, 0, 0, 0}]}, {HoldForm[Random[Integer, {1, 5}]], HoldForm[3]}, HoldForm[{0, 0, 0, 0, 0}[[3]]], HoldForm[0]}, {HoldForm[Lattice[[Random[Integer, {1, 5}]]] = 1], HoldForm[1]}, HoldForm[0]} {0, 0, 0, 1, 0} which I do not follow, but it appears that Mathematica is calculating the random index twice. David Park djmp at earthlink.net http://home.earthlink.net/~djmp/ From: mchangun at gmail.com [mailto:mchangun at gmail.com] To: mathgroup at smc.vnet.net Hi All, I have an array with 100 elements, all set to zero initially. Then I want to randomly choose one element and increase its value by one, and repeat this 16000 times. Here is my code: Lattice = Table[0, {n, 100}]; For[i = 1, i = 16000, i++, Lattice[[Random[Integer, {1, 100}]]]++] So now if I add all the elements in the list Lattice together, I should get 16000 (I use Total[Lattice] to get the sum of the list). But this doesn't happen, and strangely, each time I run this, the sum of the list is different! What am I doing wrong? Also I'm aware that a lot of Mathematica newbies try and write code like it were C++ and I think i've fallen into this trap as well. So is there a different (more Mathematica) way which I can implement the above? Thanks in advanced.