程序不会在Eclipse上运行,它不会给我一个错误?

时间:2014-08-13 00:11:08

标签: java

所以我的Eclipse工作正常,它编译了我需要的一切。现在我只是编写代码,但它没有运行它,它只是没有做任何事情。我已经用其他代码测试了Eclipse,它运行正常,所以我的代码有问题,但我不确定是什么。

我正在努力完成Project Euler的第四次挑战:

回文数字两种方式相同。由两个2位数字的乘积制成的最大回文是9009 = 91×99。

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

这是我的代码:

package me.practice;

public class Main{  

public static void main(String[] args)
{
    int palindrome = 0;

    for(int i = 0; i < 900; i++)
    {
        int num = (100 + i) * 999;

        String numString = Integer.toString(num);

        String numString_reverse = new StringBuilder(numString).reverse().toString();

        if(numString == numString_reverse)
        {
            palindrome = Integer.parseInt(numString);

            System.out.println(palindrome);

            break;
        }
    }
}
}

编辑:我也尝试在Netbeans上运行它并且它不起作用,所以Eclipse很好。

2 个答案:

答案 0 :(得分:0)

替换

if(numString == numString_reverse)

if(numString.equals(numString_reverse))

第一个if语句是比较字符串引用(并且它们每次都是假的),而不是它们的内容 - 这就是上面第二个if语句所做的。

答案 1 :(得分:0)

您的代码存在问题: 从不执行if块,因为通过乘以两个3位数得到的最大回文是906609,这是在993乘以913时获得的

上面给出的解决方案是错误的,我很抱歉:

package stackoverflow;

public class Palindrome {
    public static void main(String[] args)
    {
        int palindrome = 0;

        for(int i = 101; i < 999; i++) {
            for(int j=101; j<999; j++) {
            System.out.println("inside for loop");
            int num = i * 999;

            String numString = Integer.toString(num);

            String numString_reverse = new StringBuilder(numString).reverse().toString();

            if(numString.equals(numString_reverse)) {
                System.out.println("inside if block");
                palindrome = Integer.parseInt(numString);

                System.out.println(palindrome);

                break;
            }
            }
        }
    }   
}

以下是真正的解决方案:

package stackoverflow;

public class Palindrome2 {

    public static void main(String[] args) {
        int palindrome;
        for(int i=900; i<999; i++) {
            for(int j=901; j<999; j++) {
                int value=i*j;
                String result=Integer.toString(value);
                String revResult=new StringBuffer(result).reverse().toString();
                if(result.equals(revResult)) {
                    System.out.println(i);
                    System.out.println(j);
                    palindrome=Integer.parseInt(result);
                    System.out.println(palindrome);
                }
            }
        }
    }
}