Ошибка компиляции с массивом - 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();