0

我做了以下方法:

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 at challenge.Problem_4.GenerateSeccondPal(Problem_4.java:31) at 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

4 回答 4

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。

于 2011-07-04T16:40:15.383 回答
1

<=可能应该<避免该异常。

于 2011-07-04T16:32:21.453 回答
1

您的 count 变量不是从 0 开始的,因此您必须保留数量,以便 z2[count] 从 for 中的 0 开始,而不是从 z1.length / 2 开始

于 2011-07-04T16:32:42.640 回答
0

你这样做的那一刻:

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

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

如果你想将第一个数组的第一个位置复制到第二个,我认为你应该开始你的 counter = 0 并在 count < z2.length 时迭代;

于 2011-07-04T16:36:35.837 回答