Ryan_K
Ryan_K

Reputation: 11

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.

Upvotes: 0

Views: 83

Answers (4)

user4103106
user4103106

Reputation: 41

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.

Upvotes: 0

Matias Cicero
Matias Cicero

Reputation: 26331

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++) ...

Upvotes: 0

Patrick87
Patrick87

Reputation: 28332

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.

Upvotes: 0

Dave
Dave

Reputation: 888

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.

Upvotes: 5

Related Questions