Больше проблем с массивами, методами и параметрами ref - PullRequest
0 голосов
/ 06 сентября 2011

Ранее сегодня я работал над домашней работой для своего класса C # ССЫЛКА НА ПРЕДЫДУЩУЮ ПРОБЛЕМУ и теперь у меня есть другая проблема, которую я не понимаю, что не так. Итак, с первым постом у меня возникла проблема со статическими параметрами, поэтому я все объяснил и исправил. Но теперь я получаю сообщение об ошибке, в котором говорится, что «ссылка на объект не установлена ​​для экземпляра объекта». Я проверил на любые опечатки и до сих пор не могу запустить его. PS проблема возникает не при компиляции, а при вводе всех данных и когда я нажимаю N после ввода данных и нажатия ввода. Пожалуйста, посмотрите.

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;
        }
    }
}

В чем причина?

С уважением и надеждой на несколько советов.

PS, метод displayBooks еще не завершен.

Ответы [ 2 ]

2 голосов
/ 06 сентября 2011

Проблема с линией static string[] authorFirstNames;

Вы не инициализируете свой массив, поэтому объект имеет значение null. Вам нужно инициализировать его так: static string[] authorFirstNames=new string[1]; Вы должны указать размер массива, который равен [1]. Это означает, что массив может содержать 1 строку.

Вы можете использовать Array.Resize (), чтобы изменить размер массива на более позднем этапе.

Если проект разрешает это, вы можете использовать List<string> вместо массива строк.

Вы можете сами разобраться в подобных вещах, посмотрев код в отладчике. В этом случае, предполагая, что вы используете Visual Studio, он выделяет строку, в которой выдается исключение. Если вы посмотрите на значение authorFirstNames, вы увидите, что оно нулевое, что означает, что оно никогда не инициализировалось.

1 голос
/ 06 сентября 2011

Я не вижу места в вашем коде, чтобы инициализировать эти переменные:

static string[] authorFirstNames;
static string[] authorLastNames;
static string[] publisherNames;
static float[] prices;
...