Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
okman
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
1

При попытке заполнить поле класса выбрасывается исключение "System.NullReferenceException"

21.09.2014, 19:08. Просмотров 673. Ответов 8
Метки нет (Все метки)

При попытке заполнить поле класса выбрасывает исключение "System.NullReferenceException"
обвиняет эту строку
C#
1
AData[i].A = int.Parse(Console.ReadLine());
да, тут массив объектов.

Тут я реализую задачу Джонсона для двух станков. Если есть еще решения на С# то тоже можно скинуть, буду благодарен.

Код программы если он необходим.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
using System;
 
 
namespace algoritmJohnsona
{
    class Items
    {
        public static int a, b, id;
        public int result;
 
        public static bool operator <(Items Obj1, Items Obj2)
        {
            if (Obj1.result < Obj2.result)
                return true;
            return false;
        }
        public static bool operator >(Items Obj1, Items Obj2)
        {
            if (Obj1.result > Obj2.result)
                return true;
            return false;
        }
        public void Difference()
        {
            result = a - b;
        }
        public  int ID
        {
            get
            {
                return id;
            }
            set
            {
                id = value;
            }
        }
        public int A
        {
            set
            {
                a = value;
            }
        }
        public int B
        {
            set
            {
                b = value;
            }
        }
    }
    
    class Program
    {
        public static void ShowItems(Items[] ArrayData)
        {
            for (int i = 0; i < ArrayData.Length; i++)
                Console.WriteLine("J = {0}", ArrayData[i].ID);
        }
        public static void SwapItems(Items Obj1, Items Obj2)
        {
            int temp = Obj1.result;
            Obj1.result = Obj2.result;
            Obj2.result = temp;
        }
        public static void SortItems(Items[] ArrayData)
        {
            for (int i = 1; i < ArrayData.Length; i++)
                for (int j = i; j > 0 && ArrayData[j - 1] > ArrayData[j]; j--) // пока j>0 и элемент j-1 > j, x-массив int
                    SwapItems(ArrayData[j - 1], ArrayData[j]);        // меняем местами элементы j и j-1
        }
        
        static void Main(string[] args)
        {
            Items[] AData = new Items[5];
            Console.WriteLine("Enter Array");
 
            for (int i = 0; i < AData.Length;i++ )
            {
                Console.Write(" Pass Y1: ");
                int y = int.Parse(Console.ReadLine());
                Console.WriteLine(y);
                AData[i].A = int.Parse(Console.ReadLine()); // обвиняет эту строку
                Console.Write(" Pass Y2: ");
                AData[i].B = int.Parse(Console.ReadLine());
 
                AData[i].Difference();
            }
 
            SortItems(AData);
            ShowItems(AData);
 
            Console.ReadKey();
        }
    }
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2014, 19:08
Ответы с готовыми решениями:

При запуске программы ошибка Необработанное исключение типа "System.NullReferenceException"
При запуске программы выбивает ошибку Необработанное исключение типа...

Необработанное исключение типа "System.NullReferenceException"
Добрый день, создаю два класса, в одном определяются поля покупка и цена, в другом объект ТList...

Необработанное исключение типа "System.NullReferenceException"
Здравствуйте! Учу C#. Сейчас на этапе классов. Пробовал создавать объекты и заполнять их разными...

Исключение типа "System.NullReferenceException"
Добрый день. Помогите найти ошибку. Выскакивает исключение &quot;System.NullReferenceException&quot;. ...

Непонятно из-за чего выбрасывается исключение NullReferenceException
Вот фрагмент кода for (int i=0;i&lt;massive1.Length; i++){ string x; ...

8
insite2012
Модератор
Эксперт .NET
4948 / 3886 / 1112
Регистрация: 12.10.2013
Сообщений: 11,265
Записей в блоге: 2
21.09.2014, 19:18 2
Цитата Сообщение от okman Посмотреть сообщение
При попытке заполнить поле класса выбрасывает исключение "System.NullReferenceException"
Естественно. Вы создали массив объектов, но самих объектов в нем еще нет. В каждой итерации создавайте объект, а потом уже заполняйте его поля.

Добавлено через 2 минуты
Строкой 81 поставьте:
C#
1
AData[i]=new Items();
1
okman
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
21.09.2014, 21:56  [ТС] 3
не подскажите а почему программа в итоге выводит пять одинаковых объектов?) при все с последними введенными данными?
0
XRoy
863 / 713 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
21.09.2014, 22:46 4
okman,
Возможно вы одно и тоже значение класса присваиваете, то есть просто обновляете его данные.
Но т.к. класс ссылочный тип, на каждой итерации вы должны создавать новый объект.
0
21.09.2014, 22:46
insite2012
Модератор
Эксперт .NET
4948 / 3886 / 1112
Регистрация: 12.10.2013
Сообщений: 11,265
Записей в блоге: 2
21.09.2014, 22:51 5
Цитата Сообщение от XRoy Посмотреть сообщение
вы должны создавать новый объект.
XRoy, именно так.
okman, создание нового объекта делайте внутри цикла.
0
okman
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
21.09.2014, 23:01  [ТС] 6
C#
1
2
3
4
5
6
7
8
9
10
11
        for (int i = 0; i < AData.Length;i++ )
            {
                AData[i] = new Items();
                AData[i].ID = i;
                Console.Write(" Pass Y1: ");
                AData[i].A = int.Parse(Console.ReadLine());
                Console.Write(" Pass Y2: ");
                AData[i].B = int.Parse(Console.ReadLine());
                
                AData[i].Difference();
            }
Делаю в цикле) попробуйте сами, возможно в другой части программы ошибка?
0
insite2012
Модератор
Эксперт .NET
4948 / 3886 / 1112
Регистрация: 12.10.2013
Сообщений: 11,265
Записей в блоге: 2
21.09.2014, 23:24 7
okman,
Цитата Сообщение от okman Посмотреть сообщение
public static int a, b, id;
не подскажете зачем эти переменные сделаны static?
0
XRoy
863 / 713 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
22.09.2014, 00:22 8
okman,
И конечно можно было бы в классе Items реализовать интерфейс IComparable и сортировать стандартным методом Arrays.Sort
1
insite2012
Модератор
Эксперт .NET
4948 / 3886 / 1112
Регистрация: 12.10.2013
Сообщений: 11,265
Записей в блоге: 2
22.09.2014, 00:30 9
Цитата Сообщение от XRoy Посмотреть сообщение
реализовать интерфейс IComparable и сортировать стандартным методом Arrays.Sort
Или несколько классов-сортировщиков с реализацией IComparer<T> в каждом и static свойства в самом классе с возвращаемым типом каждого из сортировщиков. Это чтобы сортировать стандартным методом Sort(...) по разным критериям.
0
22.09.2014, 00:30
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2014, 00:30

Исключение "индекс находился вне границ массива" при попытке проверить строку string
Помогите, пожалуйста. Проблема возникает во всех случаях (строки 21, 25, 34, 36 и 38). string...

Необработанное исключение типа "System.ArgumentException" при работе с нейросетью
Добрый день! Знаю, что такая ошибка не редкость и решения есть. Уверяю Вас я пробовал все, сто...

Необработанное исключение типа "System.FormatException" при приведении типов
Не работает с double double prais; private void F() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.