ArrayIndexOutOfBoundsException,其数组足以容纳我提供的数据

时间:2011-07-04 16:28:52

标签: java arrays indexoutofboundsexception

我做了以下方法:

static int GenerateSeccondPal(int x){
    String y = Integer.toString(x);
    char[] z1 = y.toCharArray();
    char[] z2 = new char[y.length() / 2];

    for (int count = (z1.length /2); count <= z1.length; count++) {
        z2[count] = z1[count];
    }
    return Integer.parseInt(new String(z2));

}

然而,当我运行它时,我收到此错误:

  

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:3       在challenge.Problem_4.GenerateSeccondPal(Problem_4.java:31)       在challenge.Problem_4.main(Problem_4.java:6)

这很奇怪,因为我做的另一种方法是:

static int GenerateFirstPal(int x) {
    String y = Integer.toString(x);
    char[] z1 = y.toCharArray();
    char[] z2 = new char[z1.length / 2];

    for (int count = 0; count < z1.length / 2; count++) {
        z2[count] = z1[count];
    }
    return Integer.parseInt(new String(z2));

}

完美无缺。我写的有什么问题?

4 个答案:

答案 0 :(得分:3)

其他人已经指出了数组问题,但我不明白你为什么要使用数组。只需使用substring

static int generateFirstPal(int x) {
    String y = String.valueOf(x);
    String firstPart = y.substring(0, y.length() / 2);
    return Integer.parseInt(firstPart);
}

static int generateSecondPal(int x) {
    String y = String.valueOf(x);
    String secondPart = y.substring(y.length() / 2);
    return Integer.parseInt(secondPart);
}

坦率地说,这似乎是一个奇怪的设计...你是否确定这首先是正确的行为?鉴于你正在处理数字,不清楚为什么你需要一个字符串表示。根据字符串的预期长度,我希望这样:

static int generateFirstPal(int x) {
    return x / 1000;
}

static int generateSecondPal(int x) {
    return x % 1000;
}

例如,这将123456分成123和456。根据您的实际值调整1000.

答案 1 :(得分:1)

您的<=应该是<以避免该例外。

答案 2 :(得分:1)

你的计数变量不是从0开始,所以你必须休息金额,以便z2 [count]从for中的0开始,而不是从z1.length / 2开始

答案 3 :(得分:0)

那一刻你做到了:

for (int count = (z1.length /2); count <= z1.length; count++)
{ 
 z2[count] = z1[count];
} 

假设z1.length为7且z2.length为4,则意味着您的程序将崩溃,因为z2没有索引4,最多只有3个。

我认为你应该开始你的计数器= 0并迭代计数&lt; z2.length如果要将第一个数组的第一个位置复制到第二个数组;