Java:Palindrome,没有获得最大数量

时间:2016-02-26 11:09:25

标签: java palindrome

我希望得到最大的3位数的回文数。这是我的代码:

for (int start = 100; start < 1000; start++) {
        for (int start2 = 100; start2 < 1000; start2++) {
            int temp = start * start2;  
            int biggest = 1;
            String strTemp = temp + "";     

            if (strTemp.equals(new StringBuilder(strTemp).reverse().toString())) {
                if (temp > biggest) {
                    biggest = temp;
                    System.out.println("Original: " + strTemp);
                    System.out.println("Reverse: " + new StringBuilder(strTemp).reverse().toString());
                    System.out.println("Siffra: " + start);
                    System.out.println("Siffra2: " + start2);
                }

            }       
        }

最后,我得到995 x 583而不是993 x 913,这是最大的一个。为什么?我有它所以最大的int总是选择最大的数字。

3 个答案:

答案 0 :(得分:2)

您需要从两个for循环中移出int biggest = 1;。 如果你不在每个内循环中都这样做,你重新启动最大值。

int biggest = 1;
for (int start = 100; start < 1000; start++) {
    for (int start2 = 100; start2 < 1000; start2++) {
        int temp = start * start2;  

        String strTemp = temp + "";     

        if (strTemp.equals(new StringBuilder(strTemp).reverse().toString())) {
            if (temp > biggest) {
                biggest = temp;
                System.out.println("Original: " + strTemp);
                System.out.println("Reverse: " + new StringBuilder(strTemp).reverse().toString());
                System.out.println("Siffra: " + start);
                System.out.println("Siffra2: " + start2);
            }

        }       
    }

使用java 8,您可以按如下方式重写此代码:

    // Define what it means palindrome
    IntPredicate isPalindrome = n -> new StringBuffer(String.valueOf(n)).reverse().toString().equals(String.valueOf(n));


    OptionalInt max = 
             // Define a stream from 100 to 1000
             IntStream.range(100, 1000)   
             // Map the original stream to a new stream 
             // Basically for each x of the first stream
             // creates a new stream 100-1000 and map each element
             // x of the first stream and y of the second stream
             // to x * y
            .flatMap(x -> IntStream.range(100, 1000).map(y -> x * y))
             // Take only palyndrome of x * y
            .filter(isPalindrome)
            // take the max
            .max();

在大多数情况下,功能方法更具可读性,您必须循环遍历n个元素,并且更容易过滤和提取元素 做错了。

答案 1 :(得分:1)

biggest的声明移到循环之外:

int biggest = 1;
for (int start = 100; start < 1000; start++) {
        for (int start2 = 100; start2 < 1000; start2++) {
            int temp = start * start2;  
            String strTemp = temp + "";     

            if (strTemp.equals(new StringBuilder(strTemp).reverse().toString())) {
                if (temp > biggest) {
                    biggest = temp;
                    System.out.println("Original: " + strTemp);
                    System.out.println("Reverse: " + new StringBuilder(strTemp).reverse().toString());
                    System.out.println("Siffra: " + start);
                    System.out.println("Siffra2: " + start2);
                }

            }       
        }

输出:

....
Original: 906609                                                                                                                                                                                                                  
Reverse: 906609                                                                                                                                                                                                                   
Siffra: 913                                                                                                                                                                                                                       
Siffra2: 993 

答案 2 :(得分:0)

int biggest = 1;    
for (int start = 100; start < 1000; start++) {
            for (int start2 = 100; start2 < 1000; start2++) {
                int temp = start * start2;  
上面的

总是initializing biggest=1。所以你得不到合适的结果。将它保持在for循环之外。