这时关于接口方面的知识,只不过这段代码牵扯到后面还没学的一些内容,但是呢查了doc还是搞不懂,实在没办法问一下大家~~import java.nio.*;
import java.util.*;public class RandomWords implements Readable {
private static Random rand = new Random(47);
private static final char[] capitals =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
private static final char[] lowers =
"abcdefghijklmnopqrstuvwxyz".toCharArray();
private static final char[] vowels =
"aeiou".toCharArray();
private int count;
public RandomWords(int count) { this.count = count; }
public int read(CharBuffer cb) { //标签1
if(count-- == 0)
return -1; // Indicates end of input
cb.append(capitals[rand.nextInt(capitals.length)]);
for(int i = 0; i < 4; i++) {
cb.append(vowels[rand.nextInt(vowels.length)]);
cb.append(lowers[rand.nextInt(lowers.length)]);
}
cb.append(" ");
return 10; // Number of characters appended
}
public static void main(String[] args) {
Scanner s = new Scanner(new RandomWords(10)); //标签2
while(s.hasNext())
System.out.println(s.next());
}
}我想这段代码应该不难,只是关于Scanner类的用法不懂。标签1:
此处实现了Readable接口的read方法。因为看不懂的缘故,我都不知道整段程序在哪里调用了这个方法??标签2:
Scanner 的构造器接收了 RandomWords 对象但实际当中先进行了由 RandomWords 向上转型为 Readable 然后这个构造方法本身我就不明白了,按jdk上的理解应该是扫描这个对象,然而当 while(s.hasNext()) 为 true 时才执行方法体的语句,"如果此扫描器的输入中有另一个标记,则返回 true(jdk的解释这话怎么理解啊,看也看不懂)" 还有后面的 s.next() 这个方法 " 查找并返回来自此扫描器的下一个完整标记。(jdk的解释这话怎么理解啊,看也看不懂)"
import java.util.*;public class RandomWords implements Readable {
private static Random rand = new Random(47);
private static final char[] capitals =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
private static final char[] lowers =
"abcdefghijklmnopqrstuvwxyz".toCharArray();
private static final char[] vowels =
"aeiou".toCharArray();
private int count;
public RandomWords(int count) { this.count = count; }
public int read(CharBuffer cb) { //标签1
if(count-- == 0)
return -1; // Indicates end of input
cb.append(capitals[rand.nextInt(capitals.length)]);
for(int i = 0; i < 4; i++) {
cb.append(vowels[rand.nextInt(vowels.length)]);
cb.append(lowers[rand.nextInt(lowers.length)]);
}
cb.append(" ");
return 10; // Number of characters appended
}
public static void main(String[] args) {
Scanner s = new Scanner(new RandomWords(10)); //标签2
while(s.hasNext())
System.out.println(s.next());
}
}我想这段代码应该不难,只是关于Scanner类的用法不懂。标签1:
此处实现了Readable接口的read方法。因为看不懂的缘故,我都不知道整段程序在哪里调用了这个方法??标签2:
Scanner 的构造器接收了 RandomWords 对象但实际当中先进行了由 RandomWords 向上转型为 Readable 然后这个构造方法本身我就不明白了,按jdk上的理解应该是扫描这个对象,然而当 while(s.hasNext()) 为 true 时才执行方法体的语句,"如果此扫描器的输入中有另一个标记,则返回 true(jdk的解释这话怎么理解啊,看也看不懂)" 还有后面的 s.next() 这个方法 " 查找并返回来自此扫描器的下一个完整标记。(jdk的解释这话怎么理解啊,看也看不懂)"
楼主【llm0528】截止到2008-07-18 17:33:58的历史汇总数据(不包括此帖):
发帖的总数量:56 发帖的总分数:1120 每贴平均分数:20
回帖的总数量:48 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:56 结贴的总分数:1120
无满意结贴数:0 无满意结贴分:0
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:0.00 % 无满意结分率:0.00 %
敬礼!
while(s.hasNext()) //应该是有下一个就为true
System.out.println(s.next()); //返回下一个
import java.util.Random;
import java.util.Scanner;public class RandomWords implements Readable { private static Random rand = new Random(47);
private static final char[] capitals = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
private static final char[] lowers = "abcdefghijklmnopqrstuvwxyz".toCharArray();
private static final char[] vowels = "aeiou".toCharArray();
private int count; public RandomWords(int count) {
this.count = count;
} public int read(CharBuffer cb) { //标签1 当 s.next() 时 Scanner 内部会自动调用你的这个 read 方法
if (count-- == 0) return -1; //Indicates end of input
cb.append(capitals[rand.nextInt(capitals.length)]);
for (int i = 0; i < 4; i++) {
cb.append(vowels[rand.nextInt(vowels.length)]);
cb.append(lowers[rand.nextInt(lowers.length)]);
}
cb.append(" ");
return 10; //Number of characters appended
} public static void main(String[] args) {
Scanner s = new Scanner(new RandomWords(10)); //标签2 你还是先找个简单点的 Scanner 的例子看看吧
while (s.hasNext()) System.out.println(s.next()); //这个对于你来说有点太复杂了
}}
得到流之后Scanner有next(下一个单词),nextLine(下一行),nextInt(下一个整数)等等方法.
nextInt(int n) 返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0(包括)和指定值(不包括)之间均匀分布的 int值。
Scanner(Readable source) 构造一个新的 Scanner,它生成的值是从指定源扫描的。
next() 查找并返回来自此扫描器的下一个完整标记。