所以,这是我的问题,我有功课。
编写一个带有命令行参数N(整数,N> = 1)的程序,并打印小于或等于N的素数。如果数字只能被自身整除,则该数字为素数。 1。
这是我到目前为止提出的代码,我确信它有很多错误。
import java.util.Random;
public class PrimeCounter {
public static void main(String[] args) {
Random rand = new Random();
int N = rand.nextInt();
for(int number = 2; 1 <= N; number++){
if(isPrime(number)){
System.out.println(number);
}
}
}
public static boolean isPrime(int number){
for(int i=2; i<=number; i++){
if(number%i == 0){
return false;
}
}
return true;
}
}
有什么建议吗?每次我通过日食运行单元测试时,我的教授给我的所有测试都失败了。从我理解作业的方式来看,他希望程序取数字N并打印出多少素数小于或等于N.问题是我们还没有超过输入,所以我&# 39;我不确定如果没有N的某种输入线,他希望我们如何做这个程序?
答案 0 :(得分:0)
1:当您通过命令行运行Java程序时,您可以选择提供&#34;参数&#34;存储在args数组中的那些(&#34; String [] args&#34;用于)。
例如,命令&#34; java PrimeCounter 1000&#34;会运行你的程序并存储&#34; 1000&#34; (作为字符串)在args数组中。您可以通过args [0]访问它,它返回数组的第一个插槽中的字符串(您必须将其转换为整数),在这种情况下,它将是&#34; 1000&# 34。
2:以下是对您的代码的一些评论:
if(isPrime(number)){
System.out.println(number);
}
打印出每个素数,而不是素数。你应该在&#34;计数器&#34;中添加1每当你找到一个素数时变量,然后在你完成搜索时打印该计数器。
for(int number = 2; 1 <= N; number++){
&#34; 1&lt; = N&#34;转换为&#34;当1小于N&#34;时,您希望在数字小于N时继续。
答案 1 :(得分:0)
这是Sieve of Eratosthenes的实现。
public class PrimeCounter {
public static boolean isPrime(int number){
if(number == 2 || number == 3 | number == 5 || number == 7) return true;
return ((number % 2) != 0 && (number % 3) != 0 && (number % 5) != 0 && (number % 7) != 0);
}
public static void main(String args[]){
if(args.length == 0){
System.out.println("Usage:\n\tjava primecounter <number>");
System.exit(0);
}
int ceiling = Integer.parseInt(args[0]);
int numberprimes = 0;
for(int i = 0;i < ceiling;i++){
if(PrimeCounter.isPrime(i)){
numberprimes++;
System.out.println(i);
}
}
System.out.println("Total Number of Primes: " + numberprimes);
}
}
可以这样运行:
javac <file>.java
java <file> <numberToGoUpTo>
注意以上只能在指挥线上工作!
PS:不包括.java
。