📄 tij313.htm
字号:
<font color=#0000ff>public</font> <font color=#0000ff>static</font> <font color=#0000ff>void</font> fill(<font color=#0000ff>double</font>[] a, DoubleGenerator gen){
fill(a, 0, a.length, gen);
}
<font color=#0000ff>public</font> <font color=#0000ff>static</font> <font color=#0000ff>void</font>
fill(<font color=#0000ff>double</font>[] a, <font color=#0000ff>int</font> from, <font color=#0000ff>int</font> to, DoubleGenerator gen) {
<font color=#0000ff>for</font>(<font color=#0000ff>int</font> i = from; i < to; i++)
a[i] = gen.next();
}
<font color=#0000ff>private</font> <font color=#0000ff>static</font> Random r = <font color=#0000ff>new</font> Random();
<font color=#0000ff>public</font> <font color=#0000ff>static</font> <font color=#0000ff>class</font>
RandBooleanGenerator <font color=#0000ff>implements</font> BooleanGenerator {
<font color=#0000ff>public</font> <font color=#0000ff>boolean</font> next() { <font color=#0000ff>return</font> r.nextBoolean(); }
}
<font color=#0000ff>public</font> <font color=#0000ff>static</font> <font color=#0000ff>class</font>
RandByteGenerator <font color=#0000ff>implements</font> ByteGenerator {
<font color=#0000ff>public</font> <font color=#0000ff>byte</font> next() { <font color=#0000ff>return</font> (<font color=#0000ff>byte</font>)r.nextInt(); }
}
<font color=#0000ff>private</font> <font color=#0000ff>static</font> String ssource =
<font color=#004488>"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"</font>;
<font color=#0000ff>private</font> <font color=#0000ff>static</font> <font color=#0000ff>char</font>[] src = ssource.toCharArray();
<font color=#0000ff>public</font> <font color=#0000ff>static</font> <font color=#0000ff>class</font>
RandCharGenerator <font color=#0000ff>implements</font> CharGenerator {
<font color=#0000ff>public</font> <font color=#0000ff>char</font> next() {
<font color=#0000ff>return</font> src[r.nextInt(src.length)];
}
}
<font color=#0000ff>public</font> <font color=#0000ff>static</font> <font color=#0000ff>class</font>
RandStringGenerator <font color=#0000ff>implements</font> Generator {
<font color=#0000ff>private</font> <font color=#0000ff>int</font> len;
<font color=#0000ff>private</font> RandCharGenerator cg = <font color=#0000ff>new</font> RandCharGenerator();
<font color=#0000ff>public</font> RandStringGenerator(<font color=#0000ff>int</font> length) {
len = length;
}
<font color=#0000ff>public</font> Object next() {
<font color=#0000ff>char</font>[] buf = <font color=#0000ff>new</font> <font color=#0000ff>char</font>[len];
<font color=#0000ff>for</font>(<font color=#0000ff>int</font> i = 0; i < len; i++)
buf[i] = cg.next();
<font color=#0000ff>return</font> <font color=#0000ff>new</font> String(buf);
}
}
<font color=#0000ff>public</font> <font color=#0000ff>static</font> <font color=#0000ff>class</font>
RandShortGenerator <font color=#0000ff>implements</font> ShortGenerator {
<font color=#0000ff>public</font> <font color=#0000ff>short</font> next() { <font color=#0000ff>return</font> (<font color=#0000ff>short</font>)r.nextInt(); }
}
<font color=#0000ff>public</font> <font color=#0000ff>static</font> <font color=#0000ff>class</font>
RandIntGenerator <font color=#0000ff>implements</font> IntGenerator {
<font color=#0000ff>private</font> <font color=#0000ff>int</font> mod = 10000;
<font color=#0000ff>public</font> RandIntGenerator() {}
<font color=#0000ff>public</font> RandIntGenerator(<font color=#0000ff>int</font> modulo) { mod = modulo; }
<font color=#0000ff>public</font> <font color=#0000ff>int</font> next() { <font color=#0000ff>return</font> r.nextInt(mod); }
}
<font color=#0000ff>public</font> <font color=#0000ff>static</font> <font color=#0000ff>class</font>
RandLongGenerator <font color=#0000ff>implements</font> LongGenerator {
<font color=#0000ff>public</font> <font color=#0000ff>long</font> next() { <font color=#0000ff>return</font> r.nextLong(); }
}
<font color=#0000ff>public</font> <font color=#0000ff>static</font> <font color=#0000ff>class</font>
RandFloatGenerator <font color=#0000ff>implements</font> FloatGenerator {
<font color=#0000ff>public</font> <font color=#0000ff>float</font> next() { <font color=#0000ff>return</font> r.nextFloat(); }
}
<font color=#0000ff>public</font> <font color=#0000ff>static</font> <font color=#0000ff>class</font>
RandDoubleGenerator <font color=#0000ff>implements</font> DoubleGenerator {
<font color=#0000ff>public</font> <font color=#0000ff>double</font> next() {<font color=#0000ff>return</font> r.nextDouble();}
}
} <font color=#009900>///:~</font></PRE></FONT></BLOCKQUOTE><p><br></p>
<p>To fill an array of elements using a generator, the <b>fill( )</b> method takes a reference to an appropriate generator <b>interface</b>, which has a <b>next( )</b> method that will somehow produce an object of the right type (depending on how the interface is implemented). The <b>fill( )</b> method simply calls <b>next( )</b> until the desired range has been filled. Now you can create any generator by implementing the appropriate <b>interface</b> and use your generator with <b>fill( )</b>. <font size="-2"><a href="mailto:TIJ3@MindView.net?Subject=[TIJ3]Chap09_1272" title="Send BackTalk Comment">Feedback</a></font><br></p>
<p>Random data generators are useful for testing, so a set of inner classes is created to implement all the primitive generator interfaces, as well as a <b>String</b> generator to represent <b>Object</b>. You can see that <b>RandStringGenerator</b> uses <b>RandCharGenerator</b> to fill an array of characters, which is then turned into a <b>String</b>. The size of the array is determined by the constructor argument. <font size="-2"><a href="mailto:TIJ3@MindView.net?Subject=[TIJ3]Chap09_1273" title="Send BackTalk Comment">Feedback</a></font><br></p>
<p>To generate numbers that aren’t too large, <b>RandIntGenerator</b> defaults to a modulus of 10,000, but the overloaded constructor allows you to choose a smaller value. <font size="-2"><a href="mailto:TIJ3@MindView.net?Subject=[TIJ3]Chap09_1274" title="Send BackTalk Comment">Feedback</a></font><br></p>
<p>Here’s a program to test the library and demonstrate how it is used:<br></p>
<BLOCKQUOTE><FONT SIZE = "+1"><PRE><font color=#009900>//: c11:TestArrays2.java</font>
<font color=#009900>// Test and demonstrate Arrays2 utilities.</font>
<font color=#0000ff>import</font> com.bruceeckel.util.*;
<font color=#0000ff>public</font> <font color=#0000ff>class</font> TestArrays2 {
<font color=#0000ff>public</font> <font color=#0000ff>static</font> <font color=#0000ff>void</font> main(String[] args) {
<font color=#0000ff>int</font> size = 6;
<font color=#009900>// Or get the size from the command line:</font>
<font color=#0000ff>if</font>(args.length != 0) {
size = Integer.parseInt(args[0]);
<font color=#0000ff>if</font>(size < 3) {
System.out.println(<font color=#004488>"arg must be >= 3"</font>);
System.exit(1);
}
}
<font color=#0000ff>boolean</font>[] a1 = <font color=#0000ff>new</font> <font color=#0000ff>boolean</font>[size];
<font color=#0000ff>byte</font>[] a2 = <font color=#0000ff>new</font> <font color=#0000ff>byte</font>[size];
<font color=#0000ff>char</font>[] a3 = <font color=#0000ff>new</font> <font color=#0000ff>char</font>[size];
<font color=#0000ff>short</font>[] a4 = <font color=#0000ff>new</font> <font color=#0000ff>short</font>[size];
<font color=#0000ff>int</font>[] a5 = <font color=#0000ff>new</font> <font color=#0000ff>int</font>[size];
<font color=#0000ff>long</font>[] a6 = <font color=#0000ff>new</font> <font color=#0000ff>long</font>[size];
<font color=#0000ff>float</font>[] a7 = <font color=#0000ff>new</font> <font color=#0000ff>float</font>[size];
<font color=#0000ff>double</font>[] a8 = <font color=#0000ff>new</font> <font color=#0000ff>double</font>[size];
Arrays2.fill(a1, <font color=#0000ff>new</font> Arrays2.RandBooleanGenerator());
System.out.println(<font color=#004488>"a1 = "</font> + Arrays2.toString(a1));
Arrays2.fill(a2, <font color=#0000ff>new</font> Arrays2.RandByteGenerator());
System.out.println(<font color=#004488>"a2 = "</font> + Arrays2.toString(a2));
Arrays2.fill(a3, <font color=#0000ff>new</font> Arrays2.RandCharGenerator());
System.out.println(<font color=#004488>"a3 = "</font> + Arrays2.toString(a3));
Arrays2.fill(a4, <font color=#0000ff>new</font> Arrays2.RandShortGenerator());
System.out.println(<font color=#004488>"a4 = "</font> + Arrays2.toString(a4));
Arrays2.fill(a5, <font color=#0000ff>new</font> Arrays2.RandIntGenerator());
System.out.println(<font color=#004488>"a5 = "</font> + Arrays2.toString(a5));
Arrays2.fill(a6, <font color=#0000ff>new</font> Arrays2.RandLongGenerator());
System.out.println(<font color=#004488>"a6 = "</font> + Arrays2.toString(a6));
Arrays2.fill(a7, <font color=#0000ff>new</font> Arrays2.RandFloatGenerator());
System.out.println(<font color=#004488>"a7 = "</font> + Arrays2.toString(a7));
Arrays2.fill(a8, <font color=#0000ff>new</font> Arrays2.RandDoubleGenerator());
System.out.println(<font color=#004488>"a8 = "</font> + Arrays2.toString(a8));
}
} <font color=#009900>///:~</font></PRE></FONT></BLOCKQUOTE><p><br></p>
<p>The <b>size</b> parameter has a default value, but you can also set it from the command line. <font size="-2"><a href="mailto:TIJ3@MindView.net?Subject=[TIJ3]Chap09_1275" title="Send BackTalk Comment">Feedback</a></font><br></p>
<h3>
<a name="_Toc24775738"></a><a name="Heading10648"></a>Filling an array</h3>
<p>The Java standard library <b>Arrays</b> also has a <b>fill( )</b> method, but that is rather trivial; it only duplicates a single value into each location, or in the case of objects, copies the same reference into each location. Using <b>Arrays2.toString( )</b>, the <a name="Index981"></a><b>Arrays.fill( )</b> methods can be easily demonstrated:<br></p>
<BLOCKQUOTE><FONT SIZE = "+1"><PRE><font color=#009900>//: c11:FillingArrays.java</font>
<font color=#009900>// Using Arrays.fill()</font>
<font color=#0000ff>import</font> com.bruceeckel.simpletest.*;
<font color=#0000ff>import</font> com.bruceeckel.util.*;
<font color=#0000ff>import</font> java.util.*;
<font color=#0000ff>public</font> <font color=#0000ff>class</font> FillingArrays {
<font color=#0000ff>private</font> <font color=#0000ff>static</font> Test monitor = <font color=#0000ff>new</font> Test();
<font color=#0000ff>public</font> <font color=#0000ff>static</font> <font color=#0000ff>void</font> main(String[] args) {
<font color=#0000ff>int</font> size = 6;
<font color=#009900>// Or get the size from the command line:</font>
<font color=#0000ff>if</font>(args.length != 0)
size = Integer.parseInt(args[0]);
<font color=#0000ff>boolean</font>[] a1 = <font color=#0000ff>new</font> <font color=#0000ff>boolean</font>[size];
<font color=#0000ff>byte</font>[] a2 = <font color=#0000ff>new</font> <font color=#0000ff>byte</font>[size];
<font color=#0000ff>char</font>[] a3 = <font color=#0000ff>new</font> <font color=#0000ff>char</font>[size];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -