2015-04-18 2 views
2

Я пытаюсь XOR каждую букву из моего TextBox с каждым значением из моего массива. Проблема заключается в том, что когда я конвертирую double в массив int, мой массив intresult хранит только одно значение.Преобразование double в int array

Если я запускаю мой код я получаю первое письмо операции XOR, но если я вход более одного, я получаю сообщение:

System.IndexOutOfRangeException: Индекс находился вне границ массива.

Я пробовал себя создать целочисленный массив, как: int[] result = new int[] {1,2,3,4,5,6,7}; и у меня не было никаких проблем с операцию XOR до 7 букв ..

 private void iTalk_Button_12_Click(object sender, EventArgs e) 
     { 

      ambiance_RichTextBox1.Text = XorText(ambiance_RichTextBox1.Text); 
     } 
     private string XorText(string text) 
     { 

      string newText = ""; 
      double r = 3.9; 
      double[] first_value = new double[text.Length]; 
      double[] to_int_array = new double[text.Length]; 
      for (int i = 0; i < text.Length; i++) 
      { 
       double get_first = r * i * (1 - i); 
       int index = (int)(i * text.Length); 
       first_value[index] = get_first; 
      } 

      for (int i = 0; i < text.Length; i++) 
      { 

       int xnbb = 0; 
       if (first_value[i] > Math.Exp(Math.Log(2) * (-i))) 
       { 
        double get_first = first_value[i] - Math.Exp(Math.Log(2) * (-i)); 
        xnbb = 1; 
       } 

       double array_of_values = xnbb + 1 * Math.Round(Math.Exp(Math.Log(2) * (24 - i))); 

       int index = (int)(i * text.Length); 
       to_int_array[index] = array_of_values; 
       int[] result = new int[] { Convert.ToInt32(to_int_array[i]) }; 


       int charValue = Convert.ToInt32(text[i]); 
       charValue ^= result[i]%320; 
       newText += char.ConvertFromUtf32(charValue); 
      } 
      return newText; 
     } 
+0

Отбросьте этот код и начните с блок-схемы. Я не думаю, что здесь есть одна строка кода, которая имеет смысл. О, хорошо, может быть, 'return newText;' может остаться. –

ответ

1
 double[] first_value = new double[text.Length]; 
     ... 
     for (int i = 0; i < text.Length; i++) 
     { 
      double get_first = r * i * (1 - i); 
      int index = (int)(i * text.Length); 
      first_value[index] = get_first; 
     } 

Когда длина текста 2 , индекс first_value может начинаться с 0..1. i будет зацикливаться от 0 до 1. Вычисленный индекс становится равным 1 x 2 = 2, и это выходит за пределы диапазона индексов.

1

При передаче строки с 2 символов XorText, то System.IndexOutOfRangeException брошено в этой линии:

first_value[index] = get_first; 

, потому что индекс 2, когда тело цикла выполняется во второй раз:

int index = (int)(i * text.Length); 

Вам действительно стоит подумать о том, как использовать отладчик. Это облегчит программирование.

Смежные вопросы