2010-11-28 2 views
3

Я думаю, что конструктор логически корректен, я просто не могу понять, как назвать это в основном! :) Может ли кто-нибудь помочь? Если бы кто-то просто быстро просмотрел мой код, было бы неплохо :) Спасибо большое!Что случилось с моей реализацией этого алгоритма для вычисления первых N простых чисел?

Кроме того, я использую arrayLists в этой реализации, и я должен сделать это таким образом, поэтому я не хочу его изменять, хотя это гораздо проще реализовать с использованием только массивов.

import java.util.*; 
public class PrimeNumberss { 
    public static void main(String args []){  
     PrimeNumberss PrimeNumbers = new PrimeNumberss(10); 
    } 

    public PrimeNumberss (int initialCapacity) { 
     ArrayList<Integer> listOfPrimeNumbers = new ArrayList<Integer>(initialCapacity); 
     long numberOfPrimes = 0; //Initialises variable numberOfPrimes to 0 
     int start = 2; 
     boolean[] isPrimeNumber = new boolean[initialCapacity + 1]; 

     for (int i=0;i==initialCapacity;i++) {//setting all values in array of booleans to true 
     isPrimeNumber[i] = true; 
     } 

     while (start != initialCapacity) 
     { 
      if (isPrimeNumber[start]) 
      { 
      listOfPrimeNumbers.add(start); 
      //add to array list 
      numberOfPrimes++; 

      for (int i = start; start < initialCapacity; i+=start) 
      { 
       isPrimeNumber[i] = false; 
      } 

      } 

      start++; 
     } 
    } 
} 
+1

В чем проблема? Если вы получаете сообщение об ошибке, просьба предоставить подробную информацию. Если результат не так, как ожидалось, просьба сообщить подробности – 2010-11-28 23:05:19

+1

Похоже, вы называете это хорошо, в чем же проблема? – 2010-11-28 23:05:19

ответ

3
  1. Ваш алгоритм не правильно; вы найдете только простые числа меньше N (ваша начальная емкость), а не первые N простых чисел.
  2. Если вы собираетесь хранить каждое число, вы должны хранить их в переменной класса, а не в переменной, являющейся локальным конструктором. Если вы это сделаете, вы не сможете получить доступ к ним за пределами конструктора.
  3. Вы должны открыть список, используя метод геттера, чтобы обеспечить им доступ.
  4. Вы ничего не печатаете в конструкторе.
0

Все важное, есть небольшие изменения. Прямо сейчас вы получаете простые числа меньше N, поэтому, если вы хотите изменить его на первые N простых чисел, это будет реальная функциональная разница. Теперь давайте просто сделаем N = 50, чтобы вы получили более 10 простых чисел.

public class PrimeNumberss { 

    private List listOfPrimeNumbers; //add a member variable for the ArrayList 

    public static void main(String args []){  
     PrimeNumberss PrimeNumbers = new PrimeNumberss(50); 
     PrimeNumbers.print(); //use our new print method 
    } 

public PrimeNumberss (int initialCapacity) { 
    listOfPrimeNumbers = new ArrayList<Integer>(initialCapacity/2); //initialCapacity/2 is an easy (if not tight) upper bound 
    long numberOfPrimes = 0; //Initialises variable numberOfPrimes to 0 
    int start = 2; 
    boolean[] isPrimeNumber = new boolean[initialCapacity + 1]; 

    for (int i=0;i==initialCapacity;i++) {//setting all values in array of booleans to true 
    isPrimeNumber[i] = true; 
    } 

    //.... complete the constructor method as you have it. honestly, i didnt even read it all 

public void print() //add this printout function 
{ 
    int i = 1; 
    it = listOfPrimeNumbers.listIterator(); 
    while (it.hasNext()) 
    { 
      System.out.println("the " + i + "th prime is: " + it.next()); 
      i++; 
    } 
    //or just System.out.println(listOfPrimeNumbers);, letting ArrayList's toString do the work. i think it will be in [a,b,c,..,z] format 
} 

public List getPrimes() {return listOfPrimeNumbers;} //a simple getter isnt a bad idea either, even though we arent using it yet 
} 

На стороне записки, вы, вероятно, d габаритная немного лучше наименовании (PrimeNumberss и PrimeNumbers ??), но я не изменить любое из этого. Кроме того, intiialCapacity не отражает то, что это действительно означает. Может быть, что-то похожее на «верх».

Смежные вопросы