在我的代码中找不到项目euler的第4个错误

时间:2012-01-28 02:02:07

标签: java

我正在尝试解决以下问题:

  

找出由两个3位数字的乘积制成的最大回文。

我有以下Java代码:

public static void main(String[] args) {
        int a = 999, b = 999;
        for(int i = 100; i <= a; i++) {
            for(int j = 100; j <= b; j++) {
                checkPalindrome(i*j, i, j);
            }
        }
    }

    public static void checkPalindrome(int n, int a, int b) {
        String s = "" + n;
        boolean palindrome = false;
        int j = s.length()-1;

        for(int i = 0; i < s.length(); i++){
            if(s.charAt(i) != s.charAt(j))
                break;
            j -= i;
        }

        if(palindrome)
            System.out.println(n + ", " + a + ", " + b);
    }

我仍然缺少“回文”变量的变化但是目前如果我运行它我在第28行得到一个String index out of range j -= i我只是不明白为什么这种情况正在发生我的意思是,我得到的差异是导致数字低于0,但我无法弄清楚为什么会发生这种情况。有人可以解释一下吗?

4 个答案:

答案 0 :(得分:1)

将您的代码更改为:

public static void checkPalindrome(int n, int a, int b) {
        String s = "" + n;
        boolean palindrome = true;
        int j = s.length()-1;

        for(int i = 0; i < s.length(); i++){
            if(s.charAt(i) != s.charAt(j))
                palindrome = false;
        }

        if(palindrome)
            System.out.println(n + ", " + a + ", " + b);
    }

答案 1 :(得分:1)

我认为您希望j--不是j -= i。特别是因为i从0开始。

答案 2 :(得分:1)

您的方法可以像这样改进。 for循环i&lt; = j中的条件也减少了迭代次数。

public static void checkPalindrome(int n, int a, int b) {
    String s = "" + n;
    boolean palindrome = false;
    int j = s.length()-1;

    for(int i = 0; i <= j; i++){
        if(s.charAt(i) != s.charAt(j))
            break;
        j --;
    }

    if(palindrome)
        System.out.println(n + ", " + a + ", " + b);
}

希望这有帮助。

答案 3 :(得分:0)

你正在递增我 - 你想减少j - 你不想做j - = i。

否则,对于长度为5的字符串,您将获得:

i = 0,j = 4

i = 1,j = 4

i = 2,j = 3

i = 3,j = 1

i = 4,j = -2

虽然如果它给出索引超出范围的消息,那么你正在运行不同版本的代码 - j - =我不可能生成它。

相关问题