java编程思想第四版第十一章习题
- 第一题
package net.mindview.holding.test1; import java.util.ArrayList;
import java.util.List; /**
* 沙鼠
* @author samsung
*
*/
public class Gerbil {
static int counter;
int gerbilNumber; public Gerbil(){
this.gerbilNumber = counter ++;
} public String hop(){ return "沙鼠的号码:"+gerbilNumber + ",正在跳跃";
} public static void main(String[] args) {
List<Gerbil> list = new ArrayList<Gerbil>();
list.add(new Gerbil());
list.add(new Gerbil());
list.add(new Gerbil());
list.add(new Gerbil());
for(Gerbil g: list){
System.out.println(g.hop());
}
}
}运行结果
沙鼠的号码:,正在跳跃
沙鼠的号码:,正在跳跃
沙鼠的号码:,正在跳跃
沙鼠的号码:,正在跳跃 - 第二题
package net.mindview.holding.test2; import java.util.HashSet;
import java.util.Set; public class SimpleCollection { public static void main(String[] args) {
Set<Integer> c = new HashSet<Integer>();
for(int i = ; i < ; i++){
c.add(i);
}
for(Integer i: c){
System.out.print(i + ",");
}
} } - 第三题
package net.mindview.holding.test3; import java.util.ArrayList;
import java.util.List; /**
* 选择器
*/
interface Selector {
//是否结束
boolean end();
//当前
Object current();
//下一个
void next();
} /**
* 顺序
*/
public class Sequence {
//数组是有限制的,而集合时无限制的.
//private Object[] items;
private List<Object> items;
private int next = ;
//定义数组的个数
public Sequence(){
items = new ArrayList<Object>();
}
//添加
public void add(Object x){
items.add(x);
} //内部类--顺序选择器
private class SequenceSelector implements Selector {
//选择器最开始指向第一个元素
private int i = ;
@Override
public boolean end() {
return i == (items.size());
}
/**
* 新增方法: 在内部类中引用外部类
*/
public Sequence outer(){
return Sequence.this;
} @Override
public Object current() {
return items.get(i);
} @Override
public void next() {
if(i<items.size()){
i++;
}
}
} public Selector selector() {
return new SequenceSelector();
} public static void main(String[] args) {
Sequence s = new Sequence();
for(int i=; i<; i++){
s.add("对象"+i);
}
Selector selector = s.selector();
while(!selector.end()){
System.out.print(selector.current());
selector.next();
}
} }结果
对象0对象1对象2对象3对象4对象5对象6对象7对象8对象9
分析: 这个案例的重点是, 数组瘦受限制的, 集合是没有元素个数限制的。 因此,可以任意添加元素的意思就是:将数组替代为集合。
- 第四题
package net.mindview.holding.test4; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.TreeSet;
class MoiveNameGenerator {
String[] moives = {"Snow White", "Star Wars", "White Princple", "Dream","My Mother", "The Forest", "My Grandpa"};
int next;
public String next(){
String moive = moives[next];
//电影名用完之后, 循环到这个字符列表的开始处
next = (next+) % moives.length;
return moive;
} }
public class MoiveGenerator {
MoiveNameGenerator moiveNameGenerator = new MoiveNameGenerator();
public String[] fill(String[] arr){
for(int i=; i<arr.length; i++){
arr[i] = moiveNameGenerator.next();
}
return arr;
} public Collection fill(Collection col){
for(int i=; i<; i++){
col.add(moiveNameGenerator.next());
}
return col;
} public static void main(String[] args) {
MoiveGenerator moiveGenerator = new MoiveGenerator();
System.out.println(Arrays.toString(moiveGenerator.fill(new String[])));
System.out.println(moiveGenerator.fill(new ArrayList<String>()));
System.out.println(moiveGenerator.fill(new LinkedList<String>()));
System.out.println(moiveGenerator.fill(new HashSet<String>()));
System.out.println(moiveGenerator.fill(new LinkedHashSet<String>()));
System.out.println(moiveGenerator.fill(new TreeSet<String>()));
}
}运行结果:
[Snow White, Star Wars, White Princple, Dream, My Mother]
[The Forest, My Grandpa, Snow White, Star Wars, White Princple]
[Dream, My Mother, The Forest, My Grandpa, Snow White]
[My Mother, Star Wars, The Forest, Dream, White Princple]
[My Grandpa, Snow White, Star Wars, White Princple, Dream]
[My Grandpa, My Mother, Snow White, Star Wars, The Forest] - dff
- af
- a
- fa
- fda
- sf
- af
- as
- fa
- fa
栈在编程语言中,经常用来对表达式求值。请使用net.mindview.util.Stack对下面的表达式求值。 其中“+”表示将后面的字母压入栈,“-”表示将栈顶的字母押出栈。并打印他们。
package net.mindview.holding; import java.util.LinkedList; /**
* 模拟栈
*/
public class Stack<T> {
private LinkedList<T> storage = new LinkedList<T>(); //推入
public void push(T v){
storage.addFirst(v);
} public T peek(){
return storage.getFirst();
} //取出
public T pop(){
return storage.removeFirst();
} public boolean empty(){
return storage.isEmpty();
} public String toString(){
return storage.toString();
} }package net.mindview.holding.test15; import java.util.Stack; /**
* 栈在编程语言中,经常用来对表达式求值。请使用net.mindview.util.Stack对下面的表达式求值。
* 其中“+”表示将后面的字母压入栈,“-”表示将栈顶的字母押出栈。并打印他们。
* @author samsung
*
*/
public class Test15 {
Stack<Character> stac = new Stack<Character>();
//计算
public void eval(String str){
char[] chars = str.toCharArray();
for(int i=; i<chars.length; i++){
char c = chars[i++];
//遇到+号把字符入栈
switch (c){
case '+':
System.out.println("入栈:"+stac.push(chars[i]));
break;
case '-':
System.out.println("出栈:"+stac.pop());
break;
}
}
} public static void main(String[] args) {
Test15 t = new Test15();
String str = "+U+n+c---+e+r+t---+a-+i-+n+t+y---+ -+r+u--+l+e+s--";
t.eval(str);
}
}- fda
- fa
- fa
- dfa
- fa
- df
- asfd
- afa
- fa
- fa
- fa
- 二十七题
package net.mindview.holding.test27; import java.util.LinkedList;
import java.util.Queue; //消息
class Command {
String str;
public Command(String str){
this.str = str;
}
public void operation(){
System.out.println(str);
}
} //生产者
class Producter{
//生产者生成消息
public Queue<Command> produce(Queue<Command> qc){
qc.offer(new Command("A"));
qc.offer(new Command("AB"));
qc.offer(new Command("ABC"));
qc.offer(new Command("VFA"));
qc.offer(new Command("SDA"));
return qc;
}
} //消费者
class Customer {
//消费者消费消息
public void custom(Queue<Command> queue){
while(queue.peek() != null){
queue.remove().operation();
}
}
} public class Test27 {
public static void main(String[] args) {
Queue<Command> qc = new LinkedList<Command>();
Producter producter = new Producter();
Queue<Command> qcc = producter.produce(qc);
new Customer().custom(qcc); }
}运行结果:
A
AB
ABC
VFA
SDA - fa
- 第三十一题
package net.mindview.holding.test31; import java.util.Iterator;
import java.util.Random; //形状
class Shape {
public void draw() {
} public void erase() {
}
} // 圆形
class Cycle1 extends Shape { @Override
public void draw() {
System.out.println("draw cycle");
} @Override
public void erase() {
System.out.println("erase cycle");
} } class Square extends Shape {
@Override
public void draw() {
System.out.println("draw Square");
} @Override
public void erase() {
System.out.println("draw Square");
}
} // 矩形
class Triangle extends Shape {
@Override
public void draw() {
System.out.println("draw Triangle");
} @Override
public void erase() {
System.out.println("draw Triangle");
}
} // 梯形
class Trapezoid extends Shape {
@Override
public void draw() {
System.out.println("draw Trapezoid");
} @Override
public void erase() {
System.out.println("draw Trapezoid");
}
} class RandomShapeFactory implements Iterable<Shape> {
Random random = new Random(); private final int quantity; public RandomShapeFactory(int quantity) {
this.quantity= quantity;
} // 下面画什么形状呢
public Shape nextShape() {
switch (random.nextInt()) {
default:
case :
return new Cycle1();
case :
return new Square();
case :
return new Triangle();
case :
return new Trapezoid();
}
} @Override
public Iterator<Shape> iterator() {
return new Iterator<Shape>() {
private int count = ; @Override
public boolean hasNext() {
return count < quantity;
} @Override
public Shape next() {
++count;
return nextShape();
} @Override
public void remove() { }
};
}
} public class Shapes {
public static void main(String[] args) {
RandomShapeFactory rd = new RandomShapeFactory();
for (Shape s : rd) {
System.out.println(s.getClass().getSimpleName());
} } }运行结果
Triangle
Square
Triangle
Cycle1
Cycle1
Triangle
Cycle1
Square
Triangle - f
- afda
java编程思想第四版第十一章习题的更多相关文章
- java编程思想第四版第十一章总结
1. 容器类被分为两类:Collection和Map Collection是一个接口:包括: List接口: ArrayList:按照被插入顺序保存元素, 查询快, 增删改慢 LinkedList:按 ...
- java编程思想第四版第六章习题
(略) (略) 创建两个包:debug和debugoff,他们都包含一个相同的类,该类有一个debug()方法,第一个版本显示发送给控制台的String参数,而第二版本什么也不做,使用静态import ...
- java编程思想第四版第五章习题
创建一个类, 它包含一个未初始化的String引用.验证该引用被Java初始化成了null package net.mindview.initialization; public class Test ...
- java编程思想第四版第七章习题
(略) (略) (略) (略) 创建两个带有默认构造器(空参数列表)的类A和类B.从A中继承产生一个名为C的新,并在C内创建一个B类的成员.不要给C编写构造器.创建一个C类的对象并观察其结果. pac ...
- java编程思想第四版第十三章字符串 习题
fas 第二题 package net.mindview.strings; import java.util.ArrayList; import java.util.List; /** * 无限循环 ...
- Java编程思想第四版*第七章*个人练习
欢迎加群:239063848 成团的笔记:该组仅用于技术共享和交流,问题和答案公布 潘基聊天.禁止广告.禁止招聘-- 练习1:(2)创建一个简单的类.第二个类中,将一个引用定义为第一个类的对象.运用惰 ...
- java编程思想第四版第六章总结
1. 代码重构 为什么f要代码重构 第一次代码不一定是完美的, 总会发现更优雅的写法. 代码重构需要考虑的问题 类库的修改不会破坏客户端程序员的代码. 源程序方便扩展和优化 2. 包 创建一个独一无二 ...
- java编程思想 第四版 第六章 个人练习
欢迎加群:239063848 进群须知:本群仅用于技术分享与交流.问题公布与解答 禁止闲聊.非诚勿扰 练习1:(1)在某个包中创建一个类,在这个类所处的包的外部创建该类的一个实例. import mi ...
- java编程思想第四版第十三章字符串 总结
1. String和StringBulider的使用 通过书中介绍, 我们得知如下结论: 当使用+连接符将字符串进行拼接的时候, 编译器会进行自动优化为使用StringBuilder连接字符串. 当在 ...
随机推荐
- Ubuntu php安装xdebug
1.安装xdebug扩展: sudo apt-get install php-xdebug 2.找到扩展的路径: 3.编辑php.ini文件,末尾加入,保存退出: [xdebug] zend_exte ...
- Cocos2d-x 学习笔记(23) 分辨率与屏幕适配
Cocos2d-x的分辨率可以分为两种:屏幕分辨率和设计分辨率. 屏幕分辨率就是屏幕窗口的大小,单位是像素. 设计分辨率单位是点,一个点可能包括多个像素. 如果把一台显示器自身的分辨率比作屏幕分辨率的 ...
- java-try,return和finally相遇时的各种情况
今天碰到了这样一个问题:使用try,return和finally会碰到的各种情况1,try中有return时,执行顺序:2,try和finally中都有return时,执行顺序:3,运算代码在fina ...
- Swoole 的微信扫码登录
微信应用的便捷,扫码登录方式越来越被现在的应用所使用.它因为不用去记住密码,只要有微信号即可方便快捷登录.微信的开放平台原生就有支持扫码登录的功能,不过大部分人还是在用公众平台,所以扫码登录只能自行实 ...
- [洛谷P2396]yyy loves Maths VII $\&$ [CF327E]Axis Walking
这道题是一个状压动归题.子集生成,每一位表示是否选择了第$i$个数. 转移:$f[S] = \sum f[S-\{x\}]$且$x\in S$,当该子集所有元素的和为$b_1$或$b_2$时不转移. ...
- webpack 4 移除 CommonsChunkPlugin,取而代之的是两个新的配置项(optimization.splitChunks 和 optimization.runtimeChunk
默认方式 webpack模式模式现在已经做了一些通用性优化,适用于多数使用者. 需要注意的是:默认模式只影响按需(on-demand)加载的代码块(chunk),因为改变初始代码块会影响声明在HTML ...
- PHP的陷阱
PHP的陷阱 写代码的时候有个疑惑,那就是数组下标不存在的时候就会挂掉Undefined Index XXXX,这是对的,但是有时候他就不报错,这又是矛盾的. 请看下面的例子: $json_raw = ...
- transform-origin盒子旋转位置
transform-Origin属性允许您更改转换元素的位置. 2D转换元素可以改变元素的X和Y轴. 3D转换元素,还可以更改元素的Z轴. 为了更好地理解Transform-Origin属性,请查看这 ...
- JVM垃圾收集策略与算法
垃圾收集策略与算法 程序计数器.虚拟机栈.本地方法栈随线程而生,也随线程而灭:栈帧随着方法的开始而入栈,随着方法的结束而出栈.这几个区域的内存分配和回收都具有确定性,在这几个区域内不需要过多考虑回收的 ...
- VSCode实现文献管理
1 常用文献管理软件 常用的文献管理软件有mendely,zotero,endnote和Papers(需要付费),具体对比参考链接1.1.1.2 笔者只用过Mendely,当时综合考虑挑了Endnot ...