我正在尝试解决项目欧拉问题4(回文数字读取两种方式相同。由两个2位数字的乘积制成的最大回文是9009 = 91×99。 找到由两个3位数字的乘积制成的最大的回文数据但是我的代码收到错误,如下所示:
public static boolean palindrome(String pal, int length){
int i;//counter for charAt starting at 1
int x=length;//counter for charAt starting at length of product
int count=0;//counter to check if product actually is palnidrome
for (i=1;i<=length;i++){
if (pal.charAt(i)==pal.charAt(x)){
count++;
x--;
}
}
if (count==length){
return true;
}
return false;
}
public static void main(String[] args) {
int x;//number one
int y;//number two
int z;//product of both numbers
int largest=0;//largest number
int length;//length of product
String product;//product of both numbers as string
boolean check;//variable to determine whether product is palindrome
for (x=100;x<=999;x++){
for (y=100;y<=999;y++){
z=x*y;
product=String.valueOf(z);
length=product.length();
check=palindrome(product,length);
if (check==true){
largest=z;
}
System.out.println(largest);
}
}
}
但是我收到以下错误:
线程“main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:5 at java.lang.String.charAt(String.java:646) 在pkg4.largestpalindromeproduct.LargestPalindromeProduct.palindrome(LargestPalindromeProduct.java:24) 在pkg4.largestpalindromeproduct.LargestPalindromeProduct.main(LargestPalindromeProduct.java:48) Java结果:1 建立成功(总时间:0秒)
奇怪的是,当我将x改为等于“length-1”时,代码运行正常,但是从第二个到最后一个数字开始而不是最后一个数字,所以我一直得到0作为我的答案。请帮我修理一下。感谢您的帮助。
答案 0 :(得分:1)
计算机科学存在两个难题:缓存,命名变量和逐个错误。
for (i=1;i<=length;i++){
Java中的所有东西都是0索引的。
答案 1 :(得分:0)
我能够找到答案,但我不确定为什么会这样。在我的palindrome函数的for循环中,我得到了它&lt; = length。修正它的原因是将其改为(i <长度)。我不知道为什么会这样,所以有人可以赐教我,告诉我为什么会这样吗?非常感谢。