服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

一个计算质数的java程序

import java.io.*;import java.util.*;
/**
* author: liao xuefeng, www.crackj2ee.com
*/




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;
    }
}

扫描关注微信公众号