为什么我收到ArrayIndexOutOfBoundsException错误?

时间:2014-03-12 16:32:57

标签: java arrays indexoutofboundsexception

您好我已经构建了一个将用户输入的应用程序,然后根据输入执行一些代码。一切正常,直到在switch case中执行的代码行,我得到ArrayIndexOutOfBoundsException:length = 10; index = 53
它应该通过循环6次来建立一个放入kc的字符数组
任何人都可以帮忙吗?
代码:

    char[] k = input.toCharArray();


    char[] p =   { '5', '6', '7', '8', '9', '1', '2', '3', '4', '5'};


    char[] kc = { '0', '0', '0', '0', '0', '0'};



    int i = 0;
    for (i = 0; i<6; i++) {


        switch (k[0]) {

            case '0':
                kc[i] = K0[p[i]]; k[0]++;
                break;

            case '1':
                kc[i] = K1[p[i]]; k[0]++;
            break;

            case '2':
                kc[i] = K2[p[i]]; k[0]++;
            break;

            case '3':
                kc[i] = K3[p[i]]; k[0]++;
            break;

            case '4':
                kc[i] = K4[p[i]]; k[0]++;
            break;

            case '5':
                kc[i] = K5[p[i]]; k[0]++;
            break;

            case '6':
                kc[i] = K6[p[i]]; k[0]++;
            break;

            case '7':
                kc[i] = K7[p[i]]; k[0]++;
            break;

            case '8':
                kc[i] = K8[p[i]]; k[0]++;
            break;

            case '9':
                kc[i] = K9[p[i]]; k[0]++;
            break;



        };

        if (k[0] == 10) {

            k[0] = 0;
        };

    }

1 个答案:

答案 0 :(得分:4)

表示数字的字符的数值不是该数字。具体来说,字符'0'的值为48而不是0'1'的格式为49而非1,依此类推'9' } 57而不是9Here's the ASCII table for reference

您需要通过从char值中减去p,将48值从char转换为数字。您不必记住'0'48,只是数字char值是有序的。这意味着您只需减去'0'

以下是您需要改变的一个例子;您可以针对其他案例进行其他类似的更改。

case '0':
    kc[i] = K0[ p[i] - '0' ]; k[0]++;
    break;