【发布时间】:2019-10-03 18:16:37
【问题描述】:
编辑
我想创建一个 java 程序,输出小于给定数字n 的所有素数,提示用户输入。挑战在于编写一个在一行中完成此操作的函数。它并没有使它成为更好的代码,但仍然是一个有趣的挑战。
我从我的main 方法开始,我要求用户输入并将其作为我的Primes(int number, int divisor) 方法的参数传递。这个方法有两个参数,number 和divisor。该方法检查number 是否可以被divisor 整除。如果后者不划分前者,则该方法再次使用divisor = divisor - 1 调用自身,直到the divisor = 1。万岁,我们找到了一个质数。因此,我必须打印它并且必须再次使用number = number - 1 和divisor = number - 2 调用我的方法。我必须这样做,因为我必须检查每个小于 number 的素数。
Primes(number-1, number-2).
一个方法可以返回一个值AND来同时调用另一个方法吗?我需要这样的东西:
...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)));
}
}
【问题讨论】:
-
你觉得写成一行有什么好处?
-
代码不会因为写在一行就更好,而是写可读的代码,这样你就可以阅读和理解它。
-
天哪,条件是......其他东西......也许可以用一些普通的 ol if/else 块
-
k == 0->n*893953不是素数(除非计算溢出);k == 1 && n == 1->n,即1,也不是素数;否则递归调用(以前两个值之一结束,而不是素数)另一个问题Primes是返回一个值。 -
@Kirby:让你大吃一惊,不是吗? :)
标签: java primes conditional-operator