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

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

06.10.2018, 03:26. Показов 4345. Ответов 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
Ответ Создать тему
Новые блоги и статьи
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru