Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

C# C# Objects Methods Return Values

Kari Soto
Kari Soto
1,836 Points

Field 'TreehouseDefense.Point.X' is never assigned to, and will always have its default value '0'

When I use the Console.WriteLine(isOnMap);, both results are true.

Game.cs:

using System;

namespace TreehouseDefense { class Game { public static void Main() { Map map = new Map(8, 5); Point point = new Point(4, 2);

      bool isOnMap = map.OnMap(point);

      Console.WriteLine(isOnMap);
      point = new Point(10, 5);
      isOnMap = map.OnMap(point);
      Console.WriteLine(isOnMap);


    }
}

}

Map.cs:

namespace TreehouseDefense { class Map { public readonly int Width; public readonly int Height;

public Map(int width, int height)
{
  Width = width;
  Height = height;
}

public bool OnMap(Point point)
{
  return point.X >= 0 && point.X < Width && 
    point.Y >=0 && point.Y < Height;
}

} }

Point.cs:

namespace TreehouseDefense { class Point { public readonly int X; public readonly int Y;

public Point(int x, int y) {
  x = X;
  y = Y;
}

} }

I wanted to solve it myself but even after watching the last few videos multiple times, I still have no idea what is the purpose of constructs or how they work.

2 Answers

Steven Parker
Steven Parker
220,634 Points

:point_right: Your constructor for the Point class has the initializations reversed.

In your constructor:

        public Point(int x, int y) {
            x = X;
            y = Y;
        }

The idea is to use the passed-in arguments (lower case) to assign your internal class variables (UPPER case). But as it is, the assignments are reversed so that every point object location will always be 0,0 (which is on the map). This is what the warning message was trying to tell you, at least about "X" (but "Y" has the same issue).

Turn the assignments around so the internal variables get initialized correctly:

        public Point(int x, int y) {
            X = x;  // put the value from the argument into the readonly variable.
            Y = y;
        }
Kari Soto
Kari Soto
1,836 Points

Thank you. Hopefully by the time I finish C# courses, I can be able to find and solve these problems myself.

Glad I'm not the only one who made this mistake! :)