子密码方法上的IndexOutofRange异常

时间:2019-02-03 21:43:58

标签: c# indexoutofrangeexception

我正在尝试创建一种方法,该方法将混洗后的字母中的字母替换为输入的字母,但是我一直在获取IndexOutOfRange,却不知道为什么。

在调试器中,它说letterIndex等于-1,但我不知道怎么做。

        private string SubCypher(string input, string charsToSub)
    {

        char[] charsToSubArr = charsToSub.ToCharArray();
        char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
        char[] inputChars = input.ToCharArray();

        for(int index = 0; index < inputChars.Length; index++)
        {
            char toBeSubbed = inputChars[index];

            int letterIndex = Array.IndexOf(alphabet, toBeSubbed);

          inputChars[index] = charsToSubArr[letterIndex];
        }



        return new string(inputChars);
    }

    private void transformButton_Click(object sender, EventArgs e)
    {
        string input = inputTextBox.Text;

        switchCaseTextBox.Text = SwitchCase(input);

        reverseTextBox.Text = Reverse(input);

        pigLatinTextBox.Text = PigLatin(input);

        shiftTextBox.Text = ShiftCypher(input, 3);

        subTextBox.Text = SubCypher(input, "NBAJYFOWLZMPXIKUVCDEGRQSTH");

    }

2 个答案:

答案 0 :(得分:1)

如果未找到字符,则在调用String.IndexOf(Char)时返回-1。 Array.IndexOf(Array,ArrayObject)也会发生同样的情况

发生的事情是您找不到指定的字母。还应该删除字母的char []并将其保留为String,然后调用String.IndexOf(Char),这将使代码运行更快。

这里是解决该问题的好方法:

n

答案 1 :(得分:0)

outputStream = new DataOutputStream(connection.getOutputStream()); // To send string data outputStream.writeBytes(twoHyphens + boundary + lineEnd); outputStream.writeBytes("Content-Disposition: form-data; name=\"" + stringName + "\""+lineEnd); outputStream.writeBytes("Content-Type: text/plain; charset=UTF-8" + lineEnd); outputStream.writeBytes(lineEnd); outputStream.writeBytes(stringValue + lineEnd); outputStream.flush(); // To send file data outputStream.writeBytes(twoHyphens + boundary + lineEnd); outputStream.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + pathToOurFile + "\"" + lineEnd); outputStream.writeBytes(lineEnd); 表示letterIndex = -1数组不包含字符alphabet。因此,您的toBeSubbed参数可能包含小写字母字符或数字/符号。

在将其传递给input方法之前,尝试在输入字符串上调用ToUpper()

SubCypher