## CSDN博客

### 一个计算质数的Java程序

import java.io.*;
import java.util.*;
public class PrimeNumber implements Serializable{    private ArrayList list;    private int nStart;     public PrimeNumber()    {        list=new ArrayList(9);        list.add(new Integer(3));        list.add(new Integer(5));        list.add(new Integer(7));        list.add(new Integer(11));        list.add(new Integer(13));        list.add(new Integer(17));        list.add(new Integer(19));        list.add(new Integer(23));        list.add(new Integer(29));        nStart=31;    }     public void calculate(int number)    {        System.out.print("Start calculating prime numbers... ");        if (number<=0)            return;        list.ensureCapacity(number);        int nGot=0;        boolean bPrime;        int n;        for(int nTest=nStart; ; nTest+=2)        {            bPrime=true;            for(int i=0; i<list.size(); i++)            {                n=((Integer)(list.get(i))).intValue();                if (nTest % n == 0)                // not a prime number:                {                    bPrime=false;                    break;                }            }            if (bPrime) // found a prime number            {                list.add(new Integer(nTest));                nGot++;                System.out.print("/nFound "+nTest+", "+(number-nGot)+" left.");                if (nGot==number) // ok, finish calculation.                {                    nStart=nTest+2;                    System.out.println("/ndone./n");                    return;                }            }        }    }     public static boolean store(PrimeNumber obj)    {        ObjectOutputStream objOut = null;        try        {            objOut=new ObjectOutputStream(new FileOutputStream("prime.obj"));            objOut.writeObject(obj);            return true;        }        catch(Exception e) {}        finally {            if(objOut!=null) {                try { objOut.close(); } catch(Exception e) {}            }        }        return false;    }     public static PrimeNumber load()    {        try        {            ObjectInput objIn=new ObjectInputStream(new FileInputStream("prime.obj"));            PrimeNumber pn=(PrimeNumber)objIn.readObject();            objIn.close();            return pn;        }        catch(Exception e)        {        }        return null;    }     public void display()    {        System.out.print("/nThere are " + (list.size()+1) + " prime numbers./n2/t");        for(int i=0; i<list.size(); i++)        {            System.out.print(list.get(i).toString());            System.out.print("/t");        }        System.out.println("/n");    }     public void displayLast()    {        int nStart=list.size()-20;        System.out.println("/nThe last 20 prime numbers:");        if(nStart<0)            System.out.print("2/t");        for(int i=nStart; i<list.size(); i++)        {            if (i>=0)                System.out.print(list.get(i).toString()+"/t");        }        System.out.println("/n");    }     public void storeAsFile()    {        DataOutputStream dos = null;        try {            dos = new DataOutputStream(new BufferedOutputStream(                  new FileOutputStream("prime.data")));            dos.writeInt(2);            for(int i=0; i<list.size(); i++) {                dos.writeInt(((Integer)list.get(i)).intValue());            }            System.out.println("Prime numbers has been saved./n");        }        catch(Exception e) {            System.out.println("There is an error occured. Saving failed./n");        }        finally {            if(dos!=null) {                try { dos.close(); } catch(Exception e) {}            }        }    }     public static void main(String[] args)    {        // first try to read from disk:        System.out.print("Reading from file... ");        PrimeNumber pn=PrimeNumber.load();        if (pn==null)        {            System.out.println("failed./nCreate a new calculator... done.");            pn=new PrimeNumber();        }        else            System.out.println("done.");        int sel;        do        {            System.out.println("==============================================================");            sel=pn.getCommand();            switch(sel)            {                case 1:                    pn.calculate(10);                    break;                case 2:                    pn.calculate(100);                    break;                case 3:                    pn.calculate(1000);                    break;                case 4:                    pn.calculate(10000);                    break;                case 5:                    pn.display();                    break;                case 6:                    pn.displayLast();                    break;                case 7:                    pn.storeAsFile();                    break;                case 8:                    break;                default:                    System.out.println("Invalid command.");            }        }while(sel!=8);        System.out.print("/nWriting to file... ");        System.out.println(PrimeNumber.store(pn)==true?"done.":"failed.");    }     public int getCommand()    {        System.out.println("  Total "+(list.size()+1)+" prime numbers calculated. Select:");        System.out.println("    1. Calculate next 10 prime numbers.");        System.out.println("    2. Calculate next 100 prime numbers.");        System.out.println("    3. Calculate next 1000 prime numbers.");        System.out.println("    4. Calculate next 10000 prime numbers.");        System.out.println("    5. Display all prime numbers.");        System.out.println("    6. Display the last 20 numbers.");        System.out.println("    7. Save all prime numbers as a file.");        System.out.println("    8. Save all prime numbers and quit.");        System.out.print  ("  Your selection: ");        int sel=0;        try        {            InputStreamReader isr=new InputStreamReader(System.in);            sel=isr.read()-48;        }        catch(IOException e){}        return sel;    }}

0 0