Как запустить переменную через два метода в Java - PullRequest
1 голос
/ 27 июня 2019

Мне нужно найти числа в ряду, которые соответствуют критериям, установленным двумя разными способами.

Я пытался переместить утверждение, которое добавляет переменную primepalindromes из цикла for в методе main, но это дает мне число на единицу после серии номеров, которые я установил для проверки.

public static void main(String[] args) {
    boolean isPrime = true;
    boolean isPalindrome = true;
    String primepalindromes = "";
    int j;

    for (j = 1; j <= 100; j++) {
        checkprime(isPrime, j);
        if (isPrime = true) {
            checkpalindrome(isPalindrome, j);
            if (isPalindrome = true) {
                primepalindromes = primepalindromes + j + " ";
            }
        }

    }
    System.out.println(primepalindromes);

}

private static boolean checkprime(boolean isPrime, int j) {

    int temp = 0;

    for (int i = 2; i <= j / 2; i++) {
        temp = j % i;
        if (temp == 0) {
            isPrime = false;
            break;
        }
    }
    return isPrime;

}

private static boolean checkpalindrome(boolean isPalindrome, int j) {
    int r, sum = 0, temp;

    temp = j;
    while (j > 0) {
        r = j % 10;
        sum = (sum * 10) + r;
        j = j / 10;
    }
    if (temp == sum) {
        isPalindrome = false;
    }

    return isPalindrome;

}

Код должен возвращать все числа в серии наборов, которые соответствуют критериям двух методов, но вместо этого он просто дает все числа в этой серии.

1 Ответ

3 голосов
/ 27 июня 2019

Проблема в ваших утверждениях «если»:

if (isPrime = true) {

if (isPalindrome = true) {

Единственный знак «равно» - это присвоение, и значением этого является присваиваемое значение - что в этих случаях всегда верно.

Измените их, используя оператор двойного равенства:

if (isPrime == true) {

или, поскольку они являются логическими переменными, лучше просто использовать их напрямую:

if (isPrime) {

EDIT TO ADD: Кроме того, вы не назначаете результат вызова функций.В функции Java не изменяет значение примитивных типов, передаваемых в качестве аргументов, что означает, что у вас есть:

boolean checkprime(boolean isPrime, int j)

и вызовите его, скажем,

checkprime (someIsPrimeVariable, j);

Присвоение значения isPrime не приводит к изменению значения переменной, предоставленной вызывающей стороной (т. е. someIsPrimeVariable не изменяется).

Так что отбросьте аргумент isPrime, а вместо этого простоиспользуйте возвращаемое значение, так:

isPrime = checkprime(int j);

Таким образом, ваш код станет:

for (j = 1; j <= 100; j++) {
    isPrime = checkprime(j);
    if (isPrime) {
        isPalindrome = checkpalindrome(j);
        if (isPalindrome) {
            primepalindromes = primepalindromes + j + " ";
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...