功能:生成任意个9位随机字符
过程:

  • 类RandomWords 实现 Readable 接口
  • 重构read方法:根据构造函数count值生产count个随机字母,共9位,以空格间隔,第一位为大写,剩余八位为元音与小写间隔
  • 主方法:生成参数个RandomWords,并作为构造参数传递给Scanner,输出内容到控制台

个人实现:
(完成时间先不写也罢)

package thinking;import java.io.IOException;
import java.nio.CharBuffer;
import java.util.Random;
import java.util.Scanner;public class RandomWords implements Readable {private int count;private static final String captal = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";private static final String vowel = "aeiou";private static final String lowercase = "abcdefghijklmnopqrstuvwxyz";private Random random = new Random(47);@Overridepublic int read(CharBuffer cb) throws IOException {//无此则报错Exception in thread "main" java.nio.BufferOverflowException//抄书if(count-- == 0){return -1;}//抄网int number = random.nextInt( captal.length());cb.append( captal.charAt(number));for(int i=0;i<4;i++){int j = random.nextInt( vowel.length());cb.append( vowel.charAt(j));int k = random.nextInt( lowercase.length());cb.append( lowercase.charAt(k));}//无空格将输出为一行cb.append(" ");     return 10;}//public IDE生成public RandomWords(int count){this.count = count;}public static void main(String[] args) {//抄书Scanner scanner = new Scanner(new RandomWords(10));//ifwhile(scanner.hasNext()){String result = scanner.next();System.out.println(result);}}}

原书实现

package thinkingjava;import java.io.IOException;
import java.nio.CharBuffer;
import java.util.Random;
import java.util.Scanner;public class RandomWords implements Readable {private static Random rand = new Random(47);private static final char[] captals = "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;    }@Overridepublic int read(CharBuffer cb) throws IOException {if(count-- == 0){return -1;//Indicates end of input}cb.append( captals[rand.nextInt( captals.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));while(s.hasNext()){System.out.println(s.next());}}
}

不同:
使用char数组
未定义无用变量

Thinking in Java 9.6 适配接口相关推荐

  1. java 外部接口调用 设计模式_《Java设计模式》之接口模式

    -----------模式是思想的体现,而非具体的实现. 抽象的讲,类的接口是类允许其他类对象访问的方法与字段集.接口通常代表一种承诺,即方法需要实现接口方法名表示的操作,遵循代码注释和其他文档说明, ...

  2. java focuslistene_Java:FocusListener接口

    有了ActionListener事件监听器,就一定要有FocusListener焦点事件监听器. FocusListener接口所在包 FocusListener接口在event包中,即在开头引入该包 ...

  3. java如何定义一个接口inf_java.抽象、接口

    抽象 如果父类当中的方法不确定如何进行{}方法体实现,那么这就应该是一个抽象方法 定义 抽象方法:在返回值前加上abstract关键字,然后去掉大括号,分号直接结束. 抽象类:抽象方法所在的类,必须是 ...

  4. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

  5. Java™ 教程(Queue接口)

    Queue接口 Queue是在处理之前保存元素的集合,除了基本的Collection操作外,队列还提供额外的插入.删除和检查操作,Queue接口如下. public interface Queue&l ...

  6. Java中的某些接口为什么没有任何方法?

    java中,有些接口内部没有声明任何方法,也就是说,实现这些接口的类不需要重写任何方法. 这些没有任何方法声明的接口又被叫做标识接口.标识接口对实现它的类没有任何语义上的要求,仅仅充当标识的作用,用来 ...

  7. Java中Collection集合接口

    在Java中有数组,但数组不能存储引用变量.所以数组用得不是很多,一般Java中用继承Collection接口的实现类比较多.其中List接口和Set接口继承了Collection接口,而Map接口并 ...

  8. java hashedmap_Java基础 - Map接口的实现类 : HashedMap / LinkedHashMap /TreeMap 的构造/修改/遍历/ 集合视图方法/双向迭代输出...

    import java.util.*; /**一:Collection接口的 * Map接口: HashMap(主要实现类) : HashedMap / LinkedHashMap /TreeMap ...

  9. Java中抽象类和接口在概念、语法和应用上的区别和关系

    2019独角兽企业重金招聘Python工程师标准>>> 春招开始了,盆友们都忙着准备笔试.准备面试,复习学过的知识点,当然我也不例外,在这里祝每一个"有心人"心想 ...

  10. java调用c视频接口_JAVA本地调用(JNI- java调用c)

    记录一下工作内容,对术语了解不多,暂且这样记着吧. java调用c 一.写jni的步骤如下: 1.创建java类,定义接口函数,使用native修饰: 2.将java类编译成class: 3.将cla ...

最新文章

  1. 2020-08-24绘制ROC   PR曲线 核心方法总结 ,计算AUC核心方法
  2. WEB开发之如何改善PHP开发方式
  3. dataTable调用接口渲染数据,没有数据,报错
  4. [HEOI2016/TJOI2016]求和
  5. php算法学习,php算法学习之动态规划
  6. 551. Student Attendance Record I 从字符串判断学生考勤
  7. mysql一个表几亿数据_如何在mysql 造1亿条记录的大容量数据表?
  8. Google 视频编码格式 VP9 究竟厉害在哪里
  9. C++根据.h文件批量生成需要的函数框架
  10. 力扣-455 分发饼干
  11. void main(){char str[] = “\tab\n\014\\\“;printf(“%d“,strlen(str))}
  12. stm32入门(从51过渡到32)
  13. MongoDB,无模式文档型数据库简介
  14. WordPress 中文图片 上传 自动重命名
  15. 达梦8数据库安装教程
  16. mxplayer battle游戏接入
  17. PHP获取今日农历日期
  18. [转载]Swift GYB
  19. 7. 丈母娘嫌我不懂K8s的Service概念,让我去面壁
  20. 国密算法的ekey的使用--简述

热门文章

  1. Windows Mobile 获得 MAC,IP,IMEI,IMSI
  2. php项目踩到的empty函数的一个坑
  3. 详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
  4. 农民伯伯 谈 接口 [interface]
  5. 挂载、卸载、free查看内存情况、创建交换分区、回环设备、dd命令、自动挂载、fuser...
  6. Recover through incarnations: RMAN-20208
  7. 精通MVC3摘译(5)-使用URL模式最佳实践
  8. 6.微服务:从设计到部署 --- 选择部署策略
  9. 1.深入分布式缓存:从原理到实践 --- 缓存为王
  10. 5.docker 命令