我正在尝试进行字符串操作。这是我的C#代码:
static void Main(string[] args)
{
string input;
string output;
int length;
Console.WriteLine("input = ");
input = Console.ReadLine();
length = input.Length;
if ((input != "") || (length != 0))
{
Random randem = new Random();
int i = -1; //because I do not want the first number to be replaced by the random number
char[] characters = input.ToCharArray();
while (i < length)
{
int num = randem.Next(0, 9);
char num1 = Convert.ToChar(num);
i = i + 2; //so that every next character will be replaced by random number.. :D
characters[i] = num1; //*error* here
}
output = new string(characters);
Console.WriteLine(output);
}
例如:
用户输入:"i_love_to_eat_fish"
所需的输出:"i2l4v1_9o5e8t7f8s2"
注意到中唯一未改变的字符 char []字符是:“i l v _ o e t f s”。 (程序的期望输出)
我已经尝试过使用此代码了,但是,
在 characters[i] = num1
时不断收到错误;
我是否在正确的轨道上?
答案 0 :(得分:2)
每当您到达i = 17
时,您都会向i
添加2。这使得i = 19
的输入长度等于18,导致超出范围异常。
答案 1 :(得分:2)
我猜你得到的错误是IndexOutOfRangeException
这是因为i = i + 2;
。 while
确保i
小于length
,但之后添加2可能会导致更多。只需添加一个不在length
之外的支票。
i = i + 2;
if(i < length)
characters[i] = num1;
或者只需更改为for
循环。
Random randem = new Random();
char[] characters = input.ToCharArray();
for(int i = 1; i < length; i += 2)
{
int num = randem.Next(1, 10); // max value is exclusive
char num1 = num.ToString()[0];
characters[i] = num1;
}
output = new string(characters);
Console.WriteLine(output);
同样,当Shar1er80指出您当前正在将数字转换为具有相同ASCII值的char
,而不是表示该数字的实际字符。数字0-9由值48-57表示。您可以将对Random.Next
的呼叫更改为:
int num = randem.Next(48, 58); // The upper bound is exclusive, not inclusive
char num1 = (char)num;
或者正如Shar1er80那样做
int num = randem.Next(0,10) // Assumming you want digits 0-9
char num1 = num.ToString[0];
另请注意Random.Next
的最大值是独占的,因此如果您想要包含使用9的可能性,则必须使用比您想要的最大值大1的上限。
答案 2 :(得分:1)
因为你从索引-1开始,而且字符不包含-1的索引。
编辑:抱歉,没有正确答案,必须是while(i < length - 2)
答案 3 :(得分:1)
您获得的错误是IndexOutOfTheRangeException
,它解释了本身的问题。
这意味着你在循环中为数组提供的索引超出了它的length-1
(因为数组有基于0的索引)
因此,当您执行i+2
时,您需要检查i+2
在任何时间点是否都不超过i.length-1
;这在你的循环中。
通常只检查您是否在0 and Array.Length-1
答案 4 :(得分:1)
更改此行
char num1 = Convert.ToChar(num);
要
char num1 = num.ToString()[0];
然后......把
characters[i] = num1;
在if块中
if (i < length)
characters[i] = num1;