C# C# Collections Arrays Jagged Arrays

Kimberly Lu
PRO
Kimberly Lu
Pro Student 1,488 Points

Nest array multiplication table

I'm getting this error message "Object reference not set to an instance of an object." I checked StackOverflow and it suggests I did not declare my array correctly. I re-watched the video and still can't see the problem. Any advice? I'm new to Treehouse, so please let me know if you can't see my code.

Math.cs
namespace Treehouse.CodeChallenges
{
    public static class MathHelpers
    {
        public static int[][] BuildMultiplicationTable(int maxFactor)
        {
            int[][] multTable = new int[maxFactor+1][];
            for(int rowFactor = 0; rowFactor <= maxFactor; rowFactor++)
            {
                for (int colFactor =0; colFactor<= maxFactor; colFactor++)
                {
                   multTable[rowFactor][colFactor] = rowFactor * colFactor;

                 }
            }
             return multTable;
        }
    }
}

1 Answer

andren
andren
24,111 Points

The issue is that you have not set the nested array to an instance, only the outer array.

Basically when you call this code:

int[][] multTable = new int[maxFactor+1][];

You create an array of size (maxFactor+1), and each entry in that array contains an object. But that object is not by default an array itself, it is simply null. Meaning you have to set it to an instance before you use it.

In your code you try to assign something to that object before actually assigning an array to it. Basically you just need to add this line:

multTable[rowFactor] = new int[maxFactor+1];

At the start of your loop, in order to actually make the object stored in the array an array. Which is what leads you to have an array nested under an array.

Like this:

namespace Treehouse.CodeChallenges
{
    public static class MathHelpers
    {
        public static int[][] BuildMultiplicationTable(int maxFactor)
        {
            int[][] multTable = new int[maxFactor+1][];
            for(int rowFactor = 0; rowFactor <= maxFactor; rowFactor++)
            {
                multTable[rowFactor] = new int[maxFactor+1];
                for (int colFactor =0; colFactor <= maxFactor; colFactor++)
                {
                    multTable[rowFactor][colFactor] = rowFactor * colFactor;
                }
            }
            return multTable;
        }
    }
}
Kimberly Lu
Kimberly Lu
Pro Student 1,488 Points

Thank you! That's much clearer than the video. I was under the wrong impression that by just using the 2 sets of brackets, I've "instantiated" an array within an array, so I didn't think I needed to do more. But you're right. I've only created an outer array to store objects, but didn't say what those objects would be (in this case arrays).