项目欧拉项目4:最大的回文产品

时间:2016-02-04 02:24:06

标签: java

我正在尝试解决项目欧拉问题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作为我的答案。请帮我修理一下。感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

计算机科学存在两个难题:缓存,命名变量和逐个错误。

    for (i=1;i<=length;i++){

Java中的所有东西都是0索引的。

答案 1 :(得分:0)

我能够找到答案,但我不确定为什么会这样。在我的palindrome函数的for循环中,我得到了它&lt; = length。修正它的原因是将其改为(i <长度)。我不知道为什么会这样,所以有人可以赐教我,告诉我为什么会这样吗?非常感谢。