Подсчет чисел?
1 Bryan Cruz [2014-10-28 02:20:00]
Так вот моя проблема, что у меня есть для домашней работы.
Напишите программу, которая принимает аргумент командной строки N (integer, 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. Проблема в том, что мы еще не перешли на входы, так что я не как он хочет, чтобы мы делали эту программу, не имея какой-либо линии ввода для N?
input loops conditional primes
2 ответа
0 Pig [2014-10-28 02:58:00]
1: Когда вы запускаете программу Java через командную строку, у вас есть возможность предоставить "аргументы", которые хранятся в массиве args (что для "String [] args" для).
Например, команда "java PrimeCounter 1000" будет запускать вашу программу и хранить "1000" (как строку) в массиве args. Вы можете получить доступ к этому через args [0], который возвращает строку (вам придется преобразовать ее в целое число) в первый слот массива, который в этом случае будет "1000".
2: Вот некоторые комментарии к вашему коду:
if(isPrime(number)){
System.out.println(number);
}
Это печатает каждый штрих, а не количество простых чисел. Вы должны добавить 1 к переменной "счетчик" каждый раз, когда вы найдете премьер, а затем распечатайте этот счетчик, когда закончите поиск.
for(int number = 2; 1 <= N; number++){
"1 <= N" означает "в то время как 1 меньше N", но вы хотите продолжить, пока число меньше N.
0 Xenon [2015-01-15 03:57:00]
Это реализация Сито Эратосфена.
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
.