Java:回文,取不到最大数

Java: Palindrome, not getting biggest number

我想求出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,这是最大的。为什么?我有它所以最大的整数总是选择最大的数字。

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 

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

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 个元素的大多数情况下更具可读性,并且更容易过滤和提取元素而无需 做错了。

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 循环之外。