Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
14 / 14 / 5
Регистрация: 16.01.2016
Сообщений: 81

Массив внутри класса static. Выбрасывает исключение на методе .Split

06.10.2018, 03:26. Показов 4388. Ответов 20

Студворк — интернет-сервис помощи студентам
здравствуйте! доделываю ранее заказанную программу. столкнулся с гнпонятным.
объявлен класс(часть):
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
public static class LexicalAnalyze
    {
        public struct OutStruct
        {
            public string Lexem;
            public enum type
            {
                Identifier, Splitter, Literal
            }
            public type Type;
 
        }
 
        private static List<OutStruct> LB1_Result;
 
        static string buffer = string.Empty;
        static int lengthtmp;
        static int csymb;
        static string ctext;
 
 
    ===> public static string[] SpecialWords[/B][/COLOR];// = { "procedure", "begin", "end", "var", "integer", "if", "then", "else" };
 
     ===> public static char[] similarSplitters[/B][/COLOR]; // = { ',', ';', '=', ':', '(', ')', '+', '-', '*', '/' , '<', '>'};
 
        public static List<string> LB2_SpecialWords = SpecialWords.ToList();
        public static List<string> LB2_Splitters;// список разделителей
        public static List<string> LB2_Literals;
        public static List<string> LB2_Variables;
        private static List<string> LB2_Result;
 
 
        /// <summary>
        /// Производит лексический анализ текста. 
        /// </summary>
        /// <param name="code">Параметр, в котором хранится текст. </param>
        /// <returns>Возвращает таблицу стандартных символов - список, содержащий форматированную строку вида "({0}$({1},{2})", где 
        /// {0} - это имя лексемы,
        /// {1} - это номер таблицы, в которой содержится лексема: 
        /// 1 - Спец. слова,
        /// 2 - Разделитель,
        /// 3 - Литерал,
        /// 4 - Идентификатор, 
        /// {2} - порядковый номер элемента, начиная с 0. 
        /// </returns>
 
        public static List<string> AnalyzeText(string code)
        {
            ctext = code;
            lengthtmp = ctext.Length;
            csymb = 0;
            buffer = string.Empty;
            LB1_Result = new List<OutStruct>();
            while (csymb != lengthtmp)
            {
                if (char.IsDigit(ctext[csymb]))
                {
                    bool isD = true;
                    Add();
                    Next();
                    while (isD)
                    {
                        if (char.IsDigit(ctext[csymb]))
                        {
                            Add();
                            Next();
                        }
                        else
                            isD = false;
                    }
                    Out(OutStruct.type.Literal);
                    Clear();
                }
                else if (char.IsLetter(ctext[csymb]) || (ctext[csymb] == '@' || ctext[csymb] == '#' || ctext[csymb] == '$'))
                {
                    bool isL = true;
                    Add();
                    Next();
                    while (isL && csymb < lengthtmp)
                    {
                        if (char.IsLetterOrDigit(ctext[csymb]))
                        {
                            Add();
                            Next();
                        }
                        else
                            isL = false;
                    }
                    Out(OutStruct.type.Identifier);
                    Clear();
                }
                else if (isSplitter(ctext[csymb]))
                {
                    Add();
                    Next();
                    Out(OutStruct.type.Splitter);
                    Clear();
                }
                else if (ctext[csymb] == ' ' || ctext[csymb] == '\n' || ctext[csymb] == '\t')
                    Next();
                else
                    throw new UnknownSymbol(ctext[csymb].ToString(), csymb, 1);
            }
           
            LB2_Splitters = new List<string>();
            ReturnListOfSplitters();
            LB2_Literals = new List<string>();
            LB2_Variables = new List<string>();
            LB2_Result = new List<string>();
            for (int i = 0; i < LB1_Result.Count; i++)
            {
...............................
в main из внешнего файла читается грамматика. в первой строке ключевые слова, в следующей разделители. попытки таковы:
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
class Program
    {
        static void Main(string[] args)
        {
            string file = "input.txt";
            string grammar = "grammar.txt";
 
            if (!IsFileExists(file) || !IsFileExists(grammar))
            {
                Console.WriteLine("Нет требуемых файлов");
                return;
            }
 
            string code = ReadFile(file);// входной файл с анали-мой программой
 
            if(code.Trim() == "")
            {
                Console.WriteLine("Файл input.txt пустой");
                return;
            }
 
            string gramm = ReadFile(grammar);//чтение файла с описанием грамматики
 
            if (gramm.Trim() == "")
            {
                Console.WriteLine("Файл grammar.txt пустой");
                return;
            }
 
            string[] words = gramm.Split(new char[] { '\n' });
            // string[] kwords;
            // string[] kwords1;
            //  kwords = words[0].Split(new char[] { ',' });--так работает
       ===>  LexicalAnalyze.SpecialWords = words[0].Split(new char[] { ',' });
 
          //  kwords1 = words[1].Split(new char[] { ',' });--так работает
     ===>    LexicalAnalyze.similarSplitters = words[1].Split(new char[] { ',' }).Select(ch => ch[0]).ToArray();
 
            try
            {
                var readyLex = LexicalAnalyze.AnalyzeText(code);
                SyntaxAnalyze.AnalyzeText(readyLex);
            }
            catch (Errors.Error error)
            {
                Console.WriteLine(error.Message);
                Console.WriteLine(error.Length);
            }
 
            Console.WriteLine("Описание правильное");
        }
 
        static string ReadFile(string path)
        {
            string text = "";
 
            // Функция ReadAllLines возвращает массив строк, поэтому мы снова превращаем ее в строку
            string[] readText = File.ReadAllLines(path);
            foreach (string s in readText)
            {
                text += s + '\n';
            }
 
            return text;
        }
 
        // Проверяем существует ли входной файл
        static bool IsFileExists(string path)
        {
            // Возвращает true если файл существует и false в ином случае
            return File.Exists(path);
        }
 
 
    }
в строке
C#
1
 LexicalAnalyze.SpecialWords = words[0].Split(new char[] { ',' });
System.TypeInitializationException
HResult=0x80131534
Сообщение = Инициализатор типа "var3task2.LexicalAnalyze" выдал исключение.
Источник = var3task2
Трассировка стека:
в var3task2.Program.Main(String[] args) в C:\Users\yazim\Desktop\var3task2\var3tas k2\Program.cs:строка 454

Внутреннее исключение 1:
ArgumentNullException: Значение не может быть неопределенным.
Имя параметра: source

в другой строке выдает
C#
1
 LexicalAnalyze.similarSplitters = words[1].Split(new char[] { ',' }).Select(ch => ch[0]).ToArray();
System.IndexOutOfRangeException
HResult=0x80131508
Сообщение = Индекс находился вне границ массива.
Источник = mscorlib
Трассировка стека:
в System.String.get_Chars(Int32 index)
в var3task2.Program.<>c.<Main>b__0_0(Strin g ch) в C:\Users\yazim\Desktop\var3task2\var3tas k2\Program.cs:строка 457
в System.Linq.Enumerable.WhereSelectArrayI terator`2.MoveNext()
в System.Linq.Buffer`1..ctor(IEnumerable`1 source)
в System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
в var3task2.Program.Main(String[] args) в C:\Users\yazim\Desktop\var3task2\var3tas k2\Program.cs:строка 457

как можно переписать эти две строки? как я понимаю, нужен объект класса в котором будет память для массива?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.10.2018, 03:26
Ответы с готовыми решениями:

Использовать private члены класса внутри static ф-ий этого же класса.
Все привет! Такая вот проблема. Есть класс (естественно тестовый, для пример): class SCRIPT{ private: SCRIPT(); ...

Вызов public метода public класса внутри static метода static класса
Подскажите, пожалуйста, возможен вызов не статического метода не статического класса внутри статического метода статического класса? ...

Как правильно создать массив объектов текущего класса в методе данного класса?
Привет! Ставится задача создания метода, который формирует массив объектов. Правильно ли делать этот метод внутри класса, экземпляром...

20
14 / 14 / 5
Регистрация: 16.01.2016
Сообщений: 81
06.10.2018, 16:38  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от escoult Посмотреть сообщение
но то же можно сделать и со статическими полями
все понял что я не дописал
C#
1
public static string[] specialWords = new string[]
спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.10.2018, 16:38

Разделители в методе Split()
Возможно ли передавать в Split() аргумент таким образом, чтобы разделение происходило по всем элементам, кроме того, что в скобках?

Выбрасывает исключение при запуске
Здравствуйте. Установил студию, при попытке запустить выбрасывает сообщение &quot;an exception was thrown by a taskscheduler&quot;... ...

Выбрасывает исключение при сортировке
не могу понять из-за чего выбрасывает исключение при сортировке const T&amp; GetData(int index) const - здесь исключение выбрасывает ...

Виснет при методе String.Split
При таком коде: string str = Console.ReadLine(); string str1 = str.Split(new char { '.', '?', '!' }); Console.WriteLine(&quot;123&quot;); ...

Поток выбрасывает исключение в конце работы
Это лаба для универа, реализация шаблона производитель-потребитель. В конце работы выбрасывает исключение (см. скрин). В чем дело?) ...


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

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Новые блоги и статьи
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru