我试图将来自我的TextBox的每个字母与我的数组中的每个值进行异或。
问题是,当我将double
转换为int
数组时,我的int
数组result
只存储一个值。
如果我运行我的代码,我会得到第一个字母XORed,但如果我输入的内容超过一个,我会收到消息:
System.IndexOutOfRangeException:索引超出了数组的范围。
我已经尝试过创建一个类似于int[] result = new int[] {1,2,3,4,5,6,7};
的int数组,而且我对XORing最多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 :(得分: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开始运行。我将从0循环到1.计算的索引变为1 x 2 = 2,这超出了索引范围。
答案 1 :(得分:1)
将带有2个字符的字符串传递给XorText
时,会在此行中抛出System.IndexOutOfRangeException:
first_value[index] = get_first;
因为第二次执行循环体时索引为2
:
int index = (int)(i * text.Length);
你真的应该考虑学习如何使用调试器。它将使编程更容易。