0

这是我的第一篇文章:) 好吧,我正在尝试创建一个程序,该程序随机将 1 或 -1 添加到起始值 0。此过程以 500 步左右进行,然后需要将最终结果添加到大批。这是我已经达到的程度:

using System;
using System.Collections.Generic;
namespace dimensionrandomwalk
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            Random rnd = new Random();
            int[] x;
            x = new int[500];
            for (int i = 0; i < 500; i++){
                int L = rnd.Next (0, 2);
                int L1 = -1;
                int L2 = 1;
            if (L == 0) {
                    x [i] = L1;
            } else if (L == 1) {
                x [i] = L2;
            }
                x[i] = x[i+1]+x[i];

                Console.WriteLine (x[i]);
                }


        }
    }
}

我将制作两个数组,一个包含 500 个步骤,一个包含 100 个最终结果。但我无法将 x[1] 与 x[2] 相加,依此类推,直到 x[500]。谢谢:)

4

2 回答 2

1

认为这就是你想要的:

using System;
using System.Collections.Generic;
namespace dimensionrandomwalk
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            Random rnd = new Random();
            int[] x;
            x = new int[500];
            for (int i = 0; i < 500; i++){
                int L = rnd.Next (0, 2);

                x[i] = (L==0) ? -1 : 1;

                Console.WriteLine (x[i]);
            }

            int total_value = 0;
            for (int i = 0; i < 500; i++
                total_value += x[i];

            Console.WriteLine ("Total: " + total_value);
        }
    }
}

或者,如果您不关心临时数组:

using System;
using System.Collections.Generic;
namespace dimensionrandomwalk
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            Random rnd = new Random();

            int total_value = 0;

            for (int i = 0; i < 500; i++){
                int L = rnd.Next (0, 2);

                total_value += (L==0) ? -1 : 1;            
            }

            Console.WriteLine ("Total: " + total_value);
        }
    }
}
于 2013-11-08T08:25:01.203 回答
1

你可以使用 LINQ 来获得你想要的东西。此代码生成 100 次随机游走,每次迭代 500 次 +1/-1:

var rand = new Random();
var walks = Enumerable.Range(1,100)
                      .Select(item => Enumerable.Range(1, 500)
                      .Select(i => rand.Next(0, 2) * 2 - 1)
                      .Aggregate((i, j) => i + j));

“walks” IEnumerable 中的每个项目都包含 500 次迭代随机游走的结果。

于 2013-11-08T08:33:26.637 回答