2016-03-30 56 views
-1

好吧我是一個小心靈,從我必須做的任務中掙脫出來。我們必須從wiley.com/go/javaexamples(第10章示例)實現一個序列類來創建一個名爲PrimeSequence的新類,並且它必須正確對齊前100個主要序列號。我不明白實施其他課程的重點,我做到了,但我知道我沒有遵循任務規則,因爲我不明白我應該從其他課程實施什麼,我也沒有使用其他課程。我不知道什麼我必須做實施另一個班級來創建前100個素數

序列類

public interface Sequence 
{ 
    int next(); 
} 

PrimeSequence類

public class PrimeSequence implements Sequence 
{ 

public PrimeSequence() 
{ 

} 

public boolean isPrime(int x) 
{ 
    for (int start = 2; start <= Math.sqrt(x); start++) 
    { 
     if (x % start == 0) 
     { 
      return false; 
     } 
    } 
    return true; 
} 

    public int next() 
    { 

    } 
} 

PrimeSequenceTester

public class PrimeSequenceTester { 


public static void main(String[] args) 
{ 
    PrimeSequence prime = new PrimeSequence(); 

    int currentNumber = 2; 
    int primesFound = 0; 

    while (primesFound < 100) { 
     if (prime.isPrime(currentNumber)) 
     { 
      primesFound++; 

      System.out.printf("%4s",currentNumber + " "); 
      if (primesFound % 10 == 0) 
      { 
       System.out.println(); 
      } 
     } 

     currentNumber++; 
} 
} 
+1

瞭解接口的用途。 –

+0

我得到的實現讓你使用抽象方法,但我不知道如何在這裏應用 –

回答

0

下面是使用的篩子的樣本實現Eratosthenes(僅篩選奇數),並優化爲只在多個篩選中篩選一次順序的實例。你需要做一些簡單的事情,只需跟蹤當前素數是多少,並覆蓋next()函數,以便當它被調用時,不斷增加當前素數的值,直到isPrime()函數返回true,然後返回那個價值。

import java.util.BitSet; 

public class PrimeSequence implements Sequence { 
    private static final BitSet OddPrimeSieve = new BitSet(8000); 
    private static int MaxSievedPrime = 2; 

    static { 
     OddPrimeSieve.set(0, OddPrimeSieve.size() - 1, true); 
    } 

    private static int PrimeToIndex(final int prime){ 
     return (prime - 3)/2; 
    } 

    private static int IndexToPrime(final int index){ 
     return 2*index + 3; 
    } 

    private static synchronized void setMaxSievedPrime(final int max){ 
     MaxSievedPrime = max; 
     for (int index = PrimeToIndex(MaxSievedPrime) + MaxSievedPrime; 
       index < OddPrimeSieve.length(); 
       index += MaxSievedPrime) 
      OddPrimeSieve.set(index, false); 
    } 

    int currentPrime = 2; 

    @Override 
    public synchronized int next() { 
     final int current = currentPrime; 
     if (current == 2) 
     { 
      currentPrime++; 
     } 
     else 
     { 
      if (currentPrime > MaxSievedPrime) 
       setMaxSievedPrime(currentPrime); 
      currentPrime = IndexToPrime(OddPrimeSieve.nextSetBit(PrimeToIndex(currentPrime) + 1)); 
     } 
     return current; 
    } 

    public static void main(final String[] args){ 
     PrimeSequence p = new PrimeSequence(); 
     for (int i = 0; i < 100; i++) 
      System.out.println(p.next()); 
    } 
} 
相關問題