namespace Random_walk_2d
{
internal class Program
{
static void Main(string[] args)
{
Point C = new Point(2, 5);
C.Move('n');
Point.Print(C);
}
}
public class Point
{
public int x;
public int y;
readonly public Dictionary<char, Point> directions = new Dictionary<char, Point>()
{
{ 'e', new Point(1, 0) },
{ 'n', new Point(0, 1) },
{ 'w', new Point(-1, 0) },
{ 's', new Point(0, -1) },
};
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
public static Point operator +(Point A, Point B)
{
return new Point(A.x + B.x, A.y + B.y);
}
public static void Print(Point A)
{
Console.WriteLine($"({A.x}, {A.y})");
}
public void Move(char dir)
{
Point displacement = directions[dir];
this.x += displacement.x;
this.y += displacement.y;
}
}
}
I can see that the problem lies somewhere within the dictionary or the Move() method, but what I don't understand is what's actually going on under the hood? What's causing the infinite loop to occur?
And how can I solve the issue?
My friend suggested me to use arrays of 2 ints instead of Points in the dictionary, but... that kinda defeats the purpose of the whole class. Why use Points if I can just use 2 int arrays? I want a solution that doesn't do that.
If you have any other kind of advice, do let me know.
EDIT: I should've mentioned this right away, but when I run it, I get an infinite amount of at Random_walk_2d.Point..ctor(Int32, Int32) messages in the console.
EDIT2: I'm just experimenting with classes. For this project I wanted to create a random walk on a 2d grid. A 2d grid can be nicely modeled by a class with 2d point objects. I need the Move() method to move 1 unit to the right(east = 'e'), up(north = 'n') and so on.

the problem is stack overflow, this done here
when you create a Point, that creates a 'directions' member, this in turn creates 4 new Points, each of those new Points creates its own 'directions' each one creates 4 Points .....
Its not clear what you are trying to do but this fixed it
By declaring 'directions'
staticthere is only one for the whole Point class, maybe thats what you wantEDIT - yes this is what you want the 'directions' map is effectively a constant, so static works fine