我做了以下方法:
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));
}
完美无缺。我写的有什么问题?
答案 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如果要将第一个数组的第一个位置复制到第二个数组;