【ThinkingInJava】15、如何让Scanner作用到一个类上
2015-04-30 21:01
99 查看
比如我们有一个类叫RandomDoubles
然后我们用适配器模式,让Scanner可以作用到这个类上面
运行结果:
RandomDoubles:
0.11393034354413722
0.40408793420996947
0.2540807036971118
0.8903725146722422
0.44314960435529926
0.557234457792441
0.832818728830627
AdaptedRandomDoubles:
0.39757721272307445
0.9536173997034262
0.5155921375811436
0.39309093706654774
0.6936676294469794
0.3397964123945878
0.7331370887609343
0.24696295894338338
0.22107145268274675
0.940024095523216
/** * 书本:《Thinking In Java》 * 功能:当我们有一个Readable类的时候,如何让Scanner(这个类的构造器接受的就是一个Readable接口)作用于他,这个类可以产生随机浮点数 * 文件:RandomDoubles.java * 时间:2015年4月3日16:22:11 * 作者:cutter_point */ package Lesson9Interfaces; //import java.util.Date; import java.util.Random; public class RandomDoubles { private static Random rand = new Random(); //产生一个浮点数 public double next() { return rand.nextDouble(); } public static void main(String [] args) { RandomDoubles rd = new RandomDoubles(); //输出7个浮点数 for(int i = 0; i < 7; ++i) { System.out.println(rd.next() + " "); } } }
然后我们用适配器模式,让Scanner可以作用到这个类上面
/** * 书本:《Thinking In Java》 * 功能:当我们有一个Readable类的时候,如何让Scanner作用于他,这个类可以产生随机浮点数 * 文件:AdaptedRandomDoubles.java * 时间:2015年4月3日16:30:18 * 作者:cutter_point */ package Lesson9Interfaces; import java.io.IOException; import java.nio.CharBuffer; import java.util.Scanner; public class AdaptedRandomDoubles extends RandomDoubles implements Readable { private int count; //构造函数,传入count public AdaptedRandomDoubles(int count) { this.count = count; } public int read(CharBuffer cb) throws IOException //这个函数是为了给Scanner提供数据源 { if(count-- == 0) { //System.out.println("使用了read!!!"); return -1; } String result = Double.toString(this.next()) + " "; cb.append(result); //添加到cb中 return result.length(); // return 0; } public static void main(String [] args) { Scanner s = new Scanner(new AdaptedRandomDoubles(10)); // System.out.println(s.next()); while(s.hasNextDouble()) System.out.println(s.nextDouble() + " "); } }
运行结果:
RandomDoubles:
0.11393034354413722
0.40408793420996947
0.2540807036971118
0.8903725146722422
0.44314960435529926
0.557234457792441
0.832818728830627
AdaptedRandomDoubles:
0.39757721272307445
0.9536173997034262
0.5155921375811436
0.39309093706654774
0.6936676294469794
0.3397964123945878
0.7331370887609343
0.24696295894338338
0.22107145268274675
0.940024095523216
相关文章推荐
- C++程序员如何向一个java工程师解释extern "C"的作用
- C++程序员如何向一个java工程师解释extern "C"的作用
- java 在窗口中如何定义一个文本框类型的数组
- java中,如何安全的结束一个正在运行的线程?
- 如何实现用Java编写程序,设计一个模拟电梯运行的类
- java控制台程序如何判断String字符串中只输入了一个回车
- java控制台程序如何判断String字符串中只输入了一个回车
- Java&Android开源库代码剖析】のandroid-async-http(如何设计一个优雅的Android网络请求框架,同...
- Java中如何循环删除一个集合(如List)中的多个元素
- 在java中如何用键盘输入一个数,字符,字符串
- java 中 如何让一个方法内最多只能指定数量线程访问
- 黑马程序员_java如何获取一个类(包括接口和抽象类)的对象
- 如何将一个用utf-8编码的文本用java程序转换成ANSI编码的文本
- java中如何定义一个泛型函数?
- JAVA如何随机生成一个汉字
- java如何高效打印一个二维数组(不用递归,不用两个for循环)
- Java中如何把两个数组合并为一个
- 如何成为一个牛掰的Java大神
- java JsonObject的用法以及map总同一个key,但是不同的value,如何存储的问题
- 如何成为一个好的程序员...java应用架构师之后