简体   繁体   中英

Why is my method repeating when I run

public class PalindromicPrimes {

    public static void main (String[] args) {
        userInt();
        System.out.println("The palindromic primes less than " + userInt() +
                           " are:");
        for (int i = 0; i <= userInt(); i++) {
            if (isPrime() && isPalindrome()) {
                System.out.println(i);
            }
        }

    }

    private static boolean isPrime() {
         if (userInt() == 2 || userInt() == 3) {
            return true;
        }
        if (userInt() % 2 == 0) {
            return false;
        }
        int sqrt = (int) Math.sqrt(userInt()) + 1;
        for (int i = 3; i < sqrt; i += 2) {
            if (userInt() % i == 0) {
                return false;
            }
        }
        return true;
    }

    private static boolean isPalindrome() {
        if (userInt() < 0)
        return false;
    int div = 1;
    while (userInt() / div >= 10) {
        div *= 10;
    }
    while (userInt() != 0) {
        int x = userInt();
        int l = x / div;
        int r = x % 10;
        if (l != r)
            return false;
        x = (x % div) / 10;
        div /= 100;
    }
    return true;
    }
    private static int userInt() {
        Scanner s = new Scanner(System.in);
        System.out.print("Enter a positive integer: ");
        int userInt = s.nextInt();
        return userInt;
    }
}

is there a different way of getting the user input? or can I keep it this way? when it runs it just keeps prompting the user input.

rearrange it like this:

public static void main (String[] args) {

    //get it and save it here!
    int userValue = userInt();
    System.out.println("The palindromic primes less than " + userValue +
                   " are:");
    for (int i = 0; i <= userValue; i++) {
        if (isPrime(userValue) && isPalindrome(userValue)) {
            System.out.println(i);
        }
    }

}

then also update all the methods that care about this "userInt" value.

Every time you call userInt() you're telling the code to get a new value from the command line.

Try this:

public static void main (String[] args) {
    int value = userInt();
    System.out.println("The palindromic primes less than " + value +
                       " are:");
    for (int i = 0; i <= value; i++) {
        if (isPrime() && isPalindrome()) {
            System.out.println(i);
        }
    }

}

The term userInt() is a function invocation that prompts the user for input. Odds are you only want to do this once. You're doing it multiple times.

You should store the result of userInt() in a variable.

int typed = userInt();

And then use this variable to reference what the user typed instead of calling userInt() again.

System.out.println("The palindromic primes less than " + typed +
                       " are:");

for(int i = 0; i < typed; i++) ...

You keep calling userInt(). That is the problem.

I don't understand your logic. So I have not modified that code. But the code runs.

import java.util.Scanner;
public class PalindromicPrimes {

    public static void main (String[] args) {
        int x = userInt();
        System.out.println("The palindromic primes less than " + x +
                           " are:");
        for (int i = 0; i <= x; i++) {
            if (isPrime(i) && isPalindrome(i)) {
                System.out.println(i);
            }
        }

    }

    private static boolean isPrime(int a) {
         if (a == 2 || a == 3) {
            return true;
        }
        if (a % 2 == 0) {
            return false;
        }
        int sqrt = (int) Math.sqrt(a) + 1;
        for (int i = 3; i < sqrt; i += 2) {
            if (a % i == 0) {
                return false;
            }
        }
        return true;
    }

    private static boolean isPalindrome(int a) {
        if (a < 0)
        return false;
    int div = 1;
    while (a / div >= 10) {
        div *= 10;
    }
    while (a != 0) {
        int x = a;
        int l = x / div;
        int r = x % 10;
        if (l != r)
            return false;
        x = (x % div) / 10;
        div /= 100;
    }
    return true;
    }
    private static int userInt() {
        Scanner s = new Scanner(System.in);
        System.out.print("Enter a positive integer: ");
        int userInteger = s.nextInt();
        return userInteger;
    }
}

Remember, don't use the same names for variable and function. In the function userInt(), you have used a variable int userInt, to get the result from the scanner. This might be aa recursive call sometimes. Be careful with that.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM