算法-->随机值

来源:互联网 发布:小乖淘宝店 编辑:程序博客网 时间:2024/06/07 14:01
package 随机数;import java.util.Random;/** * 这是一个典型的产生随机数的算法 *  * @author 朱珍珍 * */public class A {    public static void main(String[] args) {        A a = new A();        int i, j;// 申明变量        Random r = new Random(10);// 随机数 种子        for (j = 0; j < 10; j++) {            for (i = 0; i < 10; i++) {                System.out.printf("%11d ", r.nextInt());            }            System.out.print("\n");        }    }}

这里写图片描述

package 随机数;import java.util.Random;/** * 采用一定的技巧 *  * @author 朱珍珍 * */public class B {    public static void main(String[] args) {        int i, j;        Random random = new Random();// 随机种子        for (j = 0; j < 10; j++) {            for (i = 0; i < 10; i++) {                System.out.printf("%3d ", random.nextInt(100));// 输出0-100的随机整数            }            System.out.println("\n");        }    }}

这里写图片描述

package 随机数;/** * 随机数的生成算法 *  * @author 朱珍珍 【0-1】之间均匀的分布的随机算法 */public class C {    /**     * 首先:此处的取膜运算是针对浮点数的,而c语言中的取膜运算符,不能营运于浮点型数据的操作 。这样,就需要程序员自己来编写取膜的程序     * 其次:r(i)是随着递推而每次跟新的,因此,该算法编写成方法,则必须考虑是参数是传值还是传地址 的问题     */    static double ran(double[] r) {        double base, u, v, p, temp1, temp2, temp3;        base = 256.0;// 基数        u = 17.0;        v = 139.0;        temp1 = u * (r[0]) + v;// 计算总值        temp2 = (int) (temp1 / base);// 计算商        temp3 = temp1 - temp2 * base;// 计算余数        r[0] = temp3;// 更新随机数种子,为下一次的使用        p = r[0] / base;// 随机数        return p;    }    public static void main(String[] args) {        int i;        double[] r = { 5.0 };        System.out.printf("产生10个【0,1】之间的随机数:\n");        for (i = 0; i < 10; i++) {// 循环调用            System.out.printf("%10.5f\n", ran(r));        }        System.out.printf("\n");    }}

这里写图片描述

package 随机数;/** * 产生任意范围的随机数 *  * @author 朱珍珍 方法:m+(n-m)*ran(r) */public class D {    static double ran2(double[] r) {        double base, u, v, p, temp1, temp2, temp3;        base = 256.0;// 基数        u = 17.0;        v = 139.0;        temp1 = u * (r[0]) + v;// 计算 总值        temp2 = (int) (temp1 / base);// 计算余数        temp3 = temp1 - temp2 * base;// 计算商        r[0] = temp3;// 更新随机种子。为下一次的使用        p = r[0] / base;// 随机数        return p;    }    public static void main(String[] args) {        int i;        double n, m;        double[] r = { 5.0 };        m = 10.0;        n = 20.0;        System.out.print("产生10个[10.0,20.0]之间的浮点随机数:\n");        for (i = 0; i < 10; i++) {// 循环的调用            System.out.printf("%10.5f\n", m + (n + m) * ran2(r));        }        System.out.print("\n");    }}

这里写图片描述

package 随机数;/** * 【m,n]之间均匀分布的随机整数算法 *  * @author 朱珍珍 方法:m+(int)(n-m)*ran(r)) */public class E {    static double ran3(double[] r) {        double base, u, v, p, temp1, temp2, temp3;        base = 256.0;// 基数        u = 17.0;        v = 139.0;        temp1 = u * (r[0]) + v;// 计算 总值        temp2 = (int) (temp1 / base);// 计算余数        temp3 = temp1 - temp2 * base;// 计算商        r[0] = temp3;// 更新随机种子。为下一次的使用        p = r[0] / base;// 随机数        return p;    }    public static void main(String[] args) {        int i, m, n;        double[] r = { 5.0 };        m = 100;        n = 200;        System.out.print("产生10个[100,200]之间的随机数整数:\n");        for (i = 0; i < 10; i++) {            System.out.printf("%d\n", m + (int) ((n - m) * ran3(r)));        }        System.out.print("\n");    }}

这里写图片描述