第一次写博客,给大家贡献最近看java编程思想里边数据生成器和随机数生成器

来源:互联网 发布:记录键盘输入的软件 编辑:程序博客网 时间:2024/06/07 14:34
package chapter15;public interface Generator<T> {T next();}

package chapter16;import chapter15.Generator;public class CountingGenerator {public static class Boolean implements Generator<java.lang.Boolean>{private boolean value = false;@Overridepublic java.lang.Boolean next() {value = !value;return value;}}public static class Byte implements Generator<java.lang.Byte>{private byte value = 0;@Overridepublic java.lang.Byte next() {return value++;}}static char[] chars = ("abcdefghijklmnopqrestuvwxyz"+"ABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray();public static class Character implements Generator<java.lang.Character>{private int index = -1;@Overridepublic java.lang.Character next(){index = (index +1) % chars.length;return chars[index];}}public static class String implements Generator<java.lang.String>{private int length = 7;Generator<java.lang.Character> cg = new Character();public String(){}public String(int length){this.length = length;}@Overridepublic java.lang.String next(){char[] buf = new char[length];for(int i = 0;i<length;i++){buf[i] = cg.next();}return new java.lang.String(buf);}public static class Short implements Generator<java.lang.Short>{private short value = 0;@Overridepublic java.lang.Short next(){return value++;}}public static class Integer implements Generator<java.lang.Integer>{private int value = 0;@Overridepublic java.lang.Integer next(){return value++;}}public static class Float implements Generator<java.lang.Float>{private float value = 0;public java.lang.Float next(){float result = value;value+= 1.0;return result;}}public static class Long implements Generator<java.lang.Long>{private long value = 0;public java.lang.Long next(){return value++;}}public static class Double implements Generator<java.lang.Double>{private double value = 0;public java.lang.Double next(){double result = value;value +=1.0;return value;}}}}

package chapter16;import chapter15.Generator;public class GeneratorTest {public static int size = 10;public static void test(Class<?> surroundingClass){for(Class<?> type : surroundingClass.getClasses()){System.out.print(type.getSimpleName() +": ");try{Generator<?> g = (Generator<?>)type.newInstance();for(int i = 0;i<size;i++){System.out.print(g.next() +" ");}System.out.println();} catch(Exception e){throw new RuntimeException(e);}}}public static void main(String[] args){test(CountingGenerator.class);}}

package chapter16;import java.util.Random;import chapter15.Generator;import chapter16.CountingGenerator.Character;public class RandomGenerator {private static Random r = new Random();public static class Boolean implements Generator<java.lang.Boolean>{@Overridepublic java.lang.Boolean next() {return r.nextBoolean();}}public static class Byte implements Generator<java.lang.Byte>{@Overridepublic java.lang.Byte next() {return (byte) r.nextInt();}}public static class Character implements Generator<java.lang.Character>{@Overridepublic java.lang.Character next(){return CountingGenerator.chars[r.nextInt(CountingGenerator.chars.length)];}}public static class String extends CountingGenerator.String{{cg = new Character();}public String(){}public String(int length){ super(length);};}public static class Short implements Generator<java.lang.Short>{@Overridepublic java.lang.Short next(){return (short)r.nextInt();}}public static class Integer implements Generator<java.lang.Integer>{private int mod = 10000;public Integer(){}public Integer(int modulo){mod = modulo;}@Overridepublic java.lang.Integer next(){return r.nextInt(mod);}}public static class Float implements Generator<java.lang.Float>{public java.lang.Float next(){int trimmed = Math.round(r.nextFloat() * 100);return ((float) trimmed) / 100;}}public static class Long implements Generator<java.lang.Long>{private int mod = 10000;public Long(){};public Long(int modulo){mod = modulo;}public java.lang.Long next(){return new java.lang.Long(r.nextInt(mod));}}public static class Double implements Generator<java.lang.Double>{public java.lang.Double next(){long trimmed = Math.round(r.nextDouble() * 100);return ((double)trimmed)/100;}}}

package chapter16;import java.util.Random;public class RandomGeneratorTest {public static void main(String[] args){GeneratorTest.test(RandomGenerator.class);}}


0 0
原创粉丝点击