Question

Earlier today I was working on my homework for my C# class LINK TO PREVIOUS PROBLEM and now I have another problem which I am not understanding what is wrong. So with the first post I had a problem with static parameters so I got that explained and fixed. But now, I'm getting an error saying than an "object reference not set to an instance of an object". I checked for any typos and still can not run it. PS, problem appears not when compiling, but rather when all data is entered and when I press N after typing in the data and hitting enter. Please take a look.

using System;

public class Repository 
{
    static string[] titles;
    static string[] authorFirstNames;
    static string[] authorLastNames;
    static string[] publisherNames;
    static float[] prices;
    static int number;

    static void Main(string[] args)
    {
        string title = "";
        string authorFirst = "";
        string authorLast = "";
        string publisherName = "";
        float price = 0;

        getBookInfo(ref title, ref authorFirst, ref authorLast, ref publisherName, ref price);      
        displayBooks(titles, authorFirstNames, authorLastNames, publisherNames, prices, number);
    }

    static void getBookInfo(ref string title, ref string authorFirst, 
                            ref string authorLast, ref string publisherName, 
                            ref float price)
    {
        string continued;
        string float_num;
        int i = 0;

        titles = new string[50];

        do
        {
            Console.Write("Title of book: ");
            title = Console.ReadLine();
            Console.Write("Authors first name: ");
            authorFirst = Console.ReadLine();
            Console.Write("Authors last name: ");
            authorLast = Console.ReadLine();
            Console.Write("Publishers Name: ");
            publisherName = Console.ReadLine();
            Console.Write("Price: ");
            float_num = Console.ReadLine();
            Console.Write("Add another book? Y/N ");
            continued = Console.ReadLine().ToLower();

            price = float.Parse(float_num);

            titles[i] = title;
            authorFirstNames[i] = authorFirst;
            authorLastNames[i] = authorLast;
            publisherNames[i] = publisherName;
            prices[i] = price;

            number = i;

            i++;
        }
        while (continued == "y");
    }

    static void displayBooks(string[] titles, string[] authorFirstNames, 
                             string[] authorLastNames, string[] publisherNames, 
                             float[] prices, int number)
    {
        foreach (string title in titles)
        {
            Console.WriteLine(title);
            if(title == null)
                break;
        }
    }
}

What's the cause?

Regards, and hope for some advice.

PS, displayBooks method isn't finished yet.

Was it helpful?

Solution

The problem is with the line static string[] authorFirstNames;

You're not initializing your array, so the object is null. You need to initialize it like this: static string[] authorFirstNames=new string[1]; You have to specify the size of the array, which is what the [1] is. It means the array can hold 1 string.

You can use Array.Resize() to resize the array at a later point.

If the project permits it, you may want to use a List<string> instead of an array of strings.

You can figure this sort of thing out on your own by looking at the code in a debugger. In this case, assuming you're using Visual Studio, it highlights the line where the exception is thrown. If you look at the value of authorFirstNames, you see it's null, which means it was never initialized.

OTHER TIPS

I don't see any place in your code initialize these variable:

static string[] authorFirstNames;
static string[] authorLastNames;
static string[] publisherNames;
static float[] prices;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top