Ошибка компиляции с массивом - System.ArgumentOutOfRangeException - C#
Формулировка задачи:
В строке
33
выдает ошибку: почему?Необработанное исключение типа "System.ArgumentOutOfRangeException" в mscorlib.dll Дополнительные сведения: Индекс и длина должны указывать на позицию в строке.
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace BrainfuckSolution{
- class BrainfuckCore{
- private int INDEX = 0; // индекс элемента buff
- private int COUNT = 0; // количество символов в buff
- private int SIZE = 0; // размер строки от символа до символа
- private string RESULT;
- private string code; //строка кода
- private char[] buff; //массив комманд
- private char[] code_chars; // масив code
- public BrainfuckCore(string code){
- this.code = "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++. ------.--------.>+.>." // Для обозначения обрабатываемого текста;
- code_chars = code.ToCharArray();
- command();
- }
- // Комманды кода
- private void command(){
- int i=0;
- chars();
- while(i<code.Length){
- switch(code_chars[i]){
- case '[':
- int size = getSize(code.Substring(i,code.Length));
- String str = code.Substring(i+1,i+SIZE-1);
- int length = str.Length;
- cycle(buff[INDEX],length, str);
- i += size-1;
- break;
- case '>':
- next();
- i++;
- break;
- case '+':
- inc();
- i++;
- break;
- case '<':
- previous();
- i++;
- break;
- case '-':
- dec();
- i++;
- break;
- case '.':
- getChar();
- i++;
- break;
- default:
- i++;
- break;
- }
- }
- }
- // Подсчет символов в циклах
- private int getSize(String str)
- {
- this.SIZE = 0;
- int f=0;
- int l=0;
- for(int k=0;k<str.Length;k++) {
- if (str.ToCharArray()[k] == '[') {
- f++;
- SIZE++;
- }else if (str.ToCharArray()[k] == ']') {
- l++;
- SIZE++;
- }else SIZE++;
- if (f == l) {
- k = str.Length - 1;
- return SIZE;
- }
- }
- return SIZE;
- }
- }
- }
Решение задачи: «Ошибка компиляции с массивом - System.ArgumentOutOfRangeException»
textual
Листинг программы
- string code = "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++. ------.--------.>+.>.";
- int begin = code.IndexOf("[");
- int end = code.LastIndexOf("]");
- begin = (begin != -1) ? begin + 1 : 0;
- end = (end != -1) ? end : 0;
- code = code.Substring(begin, (code.Length - begin) - (code.Length - end));
- if (code.Length == 0) Console.ReadKey(); //Выход из функции
- MatchCollection match = Regex.Matches(code, @"[\+\>\<\-\.]");
- code = String.Empty;
- for (int i = 0; i < match.Count; i++)
- {
- code += match[i].Value;
- }
- Console.Write(code);
- char[] code_chars = code.ToCharArray();
- //chars(); Понятия не имею к чему это о_О
- foreach (char ch in code_chars)
- {
- switch (ch)
- {
- case '>':
- //next(); Какая то функция next();
- break;
- case '+':
- //inc(); Какая то функция inc();
- break;
- case '<':
- //previous(); Какая то функция previous();
- break;
- case '-':
- //dec(); Какая то функция dec();
- break;
- case '.':
- //getChar(); Какая то функция getChar();
- break;
- }
- }
- Console.ReadKey();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д