Ошибка компиляции с массивом - 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();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д