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 Challenges.Problem_4.GenerateSeccondPal(Problem_4.java:31)at Challenges.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から始まっていないので、z1.length / 2から始めるのではなく、forでz2[count]が0から始まるように量を休ませる必要があります。

于 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しかないため、プログラムがクラッシュすることを意味します。

最初の配列の最初の位置を2番目の配列にコピーする場合は、counter = 0を開始し、count<z2.lengthで反復する必要があると思います。

于 2011-07-04T16:36:35.837 に答える