⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tij313.htm

📁 这也是我们java老师给我们的thinking in java的一些资料
💻 HTM
📖 第 1 页 / 共 5 页
字号:
  <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 &lt; 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 &lt; 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(&#160;)</b> method takes a reference to an appropriate generator <b>interface</b>, which has a <b>next(&#160;)</b> method that will somehow produce an object of the right type (depending on how the interface is implemented). The <b>fill(&#160;)</b> method simply calls <b>next(&#160;)</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(&#160;)</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&#146;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&#146;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 &lt; 3) {
        System.out.println(<font color=#004488>"arg must be &gt;= 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(&#160;)</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(&#160;)</b>, the <a name="Index981"></a><b>Arrays.fill(&#160;)</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 + -