Что не так с моей однострочной простой функцией в Java? - PullRequest
0 голосов
/ 03 октября 2019

Я хотел бы создать Java-программу, которая выводит все простые числа, меньшие заданного числа n, выбранного пользователем. Проблема, с которой я столкнулся, заключается в том, что мне нужно вернуть номер и снова вызвать функцию. Есть ли способ сделать это?

Всякий раз, когда k == 1, мы нашли простое число. Теперь я хочу вернуть это число (то есть значение n, когда k == 1) И продолжать искать меньшие простые числа, снова вызывая функцию.

Мне нужно что-то вроде:

...condition ? do smth : return n && Primes(smth)...

Пожалуйста, скажите мне, если я не достаточно ясно. Спасибо

Вот мой код, хотя и неполный:

 import java.*;
    import java.util.Scanner;

public class Main {

    public static int Primes(int n, int k) {
        return ((k == 0) ? n : (k == 1 && n == 1) 
                         ? n : (k == 1 && n > 1) 
                         ? Primes(n-1, n-2) : (n % k) != 0 
                         ? Primes(n, k-1) : Primes(n-1, n-2));
    }


    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner s = new Scanner(System.in);
        int num = s.nextInt();
        System.out.println("The primes are: " + Primes(num, (num-1)));
        //System.out.print(8/0);
        System.out.println(num + " " + (num-1));
    }

}

1 Ответ

0 голосов
/ 05 октября 2019

Я вроде нашел решение моей проблемы. Посмотрите, если вам интересно, хотя я знаю, что это не чистый код:

import java.*;
import java.util.Scanner;

public class Main {

    public static int Primes(int n, int k) {
        //System.out.println("The values for n and k are: " + n + " and " + k);
        return ((k < 2 && n < 2) ? PrintPrimes(n) : (k == 1 && n > 1) ? PrintPrimes(n) : (n % k) != 0 ? Primes(n, k-1) : Primes(n-1, n-2));
    }

    public static int PrintPrimes(int n) {
        System.out.println(n);
        return ((n == 1) ? n : Primes(n-2, n-3));
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner s = new Scanner(System.in);
        int num = s.nextInt();
        Primes(num, (num-1));
    }

}

И это прекрасно работает

...