数,它是从此随机数生成器的序 列中取出的、在 0(包括)和指定值(不包括)之间均匀 分布的 int值。
练习5:在RandomTester类中实现throwDice方法:能够产生1~6(包含) 的随机整数。 练习6:写一个叫作getResponse方法,随机返回以下3个字符串中的一个: “yes”、“no”或“maybe”。 练习7:扩展getResponse方法,使用ArrayList来保存一定数量的回答,然 后随机返回其中一个。
增加随机行为——Random类 类 增加随机行为
修改tech-support程序,产生随机的回答
程序, 修改 程序
声明一个Random类型的字段来保存一个随机数发生器; 类型的字段来保存一个随机数发生器; 声明一个 类型的字段来保存一个随机数发生器 声明一个ArrayList类型的字段来保存可能的回答; 类型的字段来保存可能的回答; 声明一个 类型的字段来保存可能的回答 的构造器里创建Random和ArrayList的对象; 的对象; 在Responder的构造器里创建 的构造器里创建 和 的对象 用一些短语填充这个回答列表; 用一些短语填充这个回答列表; 当调用generateResponse方法时,随机返回一个短语。 方法时, 当调用 方法时 随机返回一个短语。
练习8:给RandomTester类增加一个方法:它有一个参数max,能够产生 并返回从1到max(包含)的随机整数。 练习9:给RandomTester类增加一个方法:它有两个参数min和max,能够 产生在min和max(都包含)之间的随机整数。
使用映射表示关联
映射
映射( 是一个集合, 映射(map)是一个集合,它以键 值(key/value)对的 是一个集合 它以键/值 ) 形式保存数据。通过键可以查询到其对应的值。 形式保存数据。通过键可以
查询到其对应的值。 Map是java.util
包中的接口。 包中的接口。 是 包中的接口 ArrayList和Map的区别是:Map里的每一个元素不是 的区别是: 和 的区别是 里的每一个元素不是 单个对象,而是一对对象。 单个对象,而是一对对象。这一对对象是键对象和对 应的值对象。 应的值对象。 使用映射可以方便地实现单向查找:已知要查找的键, 使用映射可以方便地实现单向查找:已知要查找的键, 通过这个键获得其对应的值。 通过这个键获得其对应的值。
使用映射表示关联
使用HashMap 使用
HashMap实现了 实现了Map接口。 接口。 实现了 接口 HashMap最重要的方法是 和get,put方法把一个条 最重要的方法是put和 , 方法把一个条 最重要的方法是 目放进映射中, 目放进映射中,而get根据一个已知的键取得其对应的 根据一个已知的键取得其对应的 值。
HashMap
phoneBook = new HashMap(); phoneBook.put(“Charles Nguyen”, “(531)9392 4587”); phoneBook.put(“Lisa Jones”, “(402)4536 4674”); phoneBook.put(“William H. Smith”, “(998)5488 0123”); System.out.println(phoneBook.get(“Lisa Jones”));
使用映射表示关联
练习10:定义 来实现一个电话簿。( 练习 :定义MapTester类,用HashMap来实现一个电话簿。(别忘了 类 来实现一个电话簿。(别忘了 导入java.util.HashMap)。在这个类中,实现以下两个方法: )。在这个类中 导入 )。在这个类中,实现以下两个方法:
public void enterNumber(String name, String number) public String lookupNumber(String name)
这两个方法使用HashMap的put和get方法来实现各自的功能。 这两个方法使用 的 和 方法来实现各自的功能。 方法来实现各自的功能
试一试: 试一试:
如果将一个条目(其键或值已经在映射中存在)放入映射中, 如果将一个条目(其键或值已经在映射中存在)放入映射中,会发生什 么情况? 么情况? 如何判断某个键是否已经存储在一个映射中了(给出一个Java代码的例 如何判断某个键是否已经存储在一个映射中了(给出一个 代码的例 子)? 如果试图查找一