我将如何使用用户输入的对数打印出一对 emirp 数字?

How would I print out a pair of emirp numbers with user input for the number of pairs?

我有一个程序,当用户输入他们想要显示的对数时,我需要打印出 emirp 对。在程序中,我有主要功能和其他三个功能。

//returns true if num is prime
public static boolean isPrime(int num)

//returns the reverse of number
public static int reversal(int number)

//returns true if number is a palindrome
public static boolean isPalindrome(int number)

主函数接受用户输入,然后将用户值传递给另一个打印对的函数。我在这部分迷路了,因为我知道如何在一个范围内打印对,并包括如下所示的重复项,但不包含给定数量的对。如有任何帮助,我们将不胜感激!

public static void printPairs(int pairs) {
    
    for (int i = 0; i < 100; i++) {
        int rev = reversal(i);
        if (isPrime(i) == true && isPrime(rev) == true && isPalindrome(i) == false) {
            System.out.print("(" + i + "," + rev + ") ");
        }
    }
}

Output: (13,31) (17,71) (31,13) (37,73) (71,17) (73,37) (79,97) (97,79) 

像这样?

public static void printPairs(int pairs) {
    
    for (int i = 0; i < 100; i++) {
        int rev = reversal(i);
        if (isPrime(i) == true && isPrime(rev) == true && isPalindrome(i) == false) {
            System.out.print("(" + i + "," + rev + ") ");
            if ((pairs--) < 0) {
                return;
            }
        }
    }
}

也就是拿到对数就退出?

另外两个建议:不要将自己限制在 100 个以内,仅考虑反转数高于当前数的情况来消除重复项。 (如果它更低,那么它已经被打印出来了)。

public static void printPairs(int pairs) {
    int i=10;
    while (pairs > 0) {
        i++;
        int rev = reversal(i);
        if (rev<i) {
            continue;
        }
        if (isPrime(i) == true && isPrime(rev) == true && isPalindrome(i) == false) {
            System.out.print("(" + i + "," + rev + ") ");
            pairs--;
        }
    }
}

老师一般不喜欢continue语句,可以把condition折叠到main条件语句中。 P.S。 10 是第一个 non-palindrome 个数字。