Подсчет чисел?

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.