1. 第一题

    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());
    }
    }
    }

    运行结果

    沙鼠的号码:,正在跳跃
    沙鼠的号码:,正在跳跃
    沙鼠的号码:,正在跳跃
    沙鼠的号码:,正在跳跃
  2. 第二题
    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 + ",");
    }
    } }
  3. 第三题
    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

    分析: 这个案例的重点是, 数组瘦受限制的, 集合是没有元素个数限制的。 因此,可以任意添加元素的意思就是:将数组替代为集合。

  4. 第四题
    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]
  5. dff
  6. af
  7. a
  8. fa
  9. fda
  10. sf
  11. af
  12. as
  13. fa
  14. fa
  15. 栈在编程语言中,经常用来对表达式求值。请使用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);
    }
    }
  16. fda
  17. fa
  18. fa
  19. dfa
  20. fa
  21. df
  22. asfd
  23. afa
  24. fa
  25. fa
  26. fa
  27. 二十七题
    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
  28. fa
  29. 第三十一题
    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
  30. f
  31. afda

java编程思想第四版第十一章习题的更多相关文章

  1. java编程思想第四版第十一章总结

    1. 容器类被分为两类:Collection和Map Collection是一个接口:包括: List接口: ArrayList:按照被插入顺序保存元素, 查询快, 增删改慢 LinkedList:按 ...

  2. java编程思想第四版第六章习题

    (略) (略) 创建两个包:debug和debugoff,他们都包含一个相同的类,该类有一个debug()方法,第一个版本显示发送给控制台的String参数,而第二版本什么也不做,使用静态import ...

  3. java编程思想第四版第五章习题

    创建一个类, 它包含一个未初始化的String引用.验证该引用被Java初始化成了null package net.mindview.initialization; public class Test ...

  4. java编程思想第四版第七章习题

    (略) (略) (略) (略) 创建两个带有默认构造器(空参数列表)的类A和类B.从A中继承产生一个名为C的新,并在C内创建一个B类的成员.不要给C编写构造器.创建一个C类的对象并观察其结果. pac ...

  5. java编程思想第四版第十三章字符串 习题

    fas 第二题 package net.mindview.strings; import java.util.ArrayList; import java.util.List; /** * 无限循环 ...

  6. Java编程思想第四版*第七章*个人练习

    欢迎加群:239063848 成团的笔记:该组仅用于技术共享和交流,问题和答案公布 潘基聊天.禁止广告.禁止招聘-- 练习1:(2)创建一个简单的类.第二个类中,将一个引用定义为第一个类的对象.运用惰 ...

  7. java编程思想第四版第六章总结

    1. 代码重构 为什么f要代码重构 第一次代码不一定是完美的, 总会发现更优雅的写法. 代码重构需要考虑的问题 类库的修改不会破坏客户端程序员的代码. 源程序方便扩展和优化 2. 包 创建一个独一无二 ...

  8. java编程思想 第四版 第六章 个人练习

    欢迎加群:239063848 进群须知:本群仅用于技术分享与交流.问题公布与解答 禁止闲聊.非诚勿扰 练习1:(1)在某个包中创建一个类,在这个类所处的包的外部创建该类的一个实例. import mi ...

  9. java编程思想第四版第十三章字符串 总结

    1. String和StringBulider的使用 通过书中介绍, 我们得知如下结论: 当使用+连接符将字符串进行拼接的时候, 编译器会进行自动优化为使用StringBuilder连接字符串. 当在 ...

随机推荐

  1. Ubuntu php安装xdebug

    1.安装xdebug扩展: sudo apt-get install php-xdebug 2.找到扩展的路径: 3.编辑php.ini文件,末尾加入,保存退出: [xdebug] zend_exte ...

  2. ‎Cocos2d-x 学习笔记(23) 分辨率与屏幕适配

    Cocos2d-x的分辨率可以分为两种:屏幕分辨率和设计分辨率. 屏幕分辨率就是屏幕窗口的大小,单位是像素. 设计分辨率单位是点,一个点可能包括多个像素. 如果把一台显示器自身的分辨率比作屏幕分辨率的 ...

  3. java-try,return和finally相遇时的各种情况

    今天碰到了这样一个问题:使用try,return和finally会碰到的各种情况1,try中有return时,执行顺序:2,try和finally中都有return时,执行顺序:3,运算代码在fina ...

  4. Swoole 的微信扫码登录

    微信应用的便捷,扫码登录方式越来越被现在的应用所使用.它因为不用去记住密码,只要有微信号即可方便快捷登录.微信的开放平台原生就有支持扫码登录的功能,不过大部分人还是在用公众平台,所以扫码登录只能自行实 ...

  5. [洛谷P2396]yyy loves Maths VII $\&$ [CF327E]Axis Walking

    这道题是一个状压动归题.子集生成,每一位表示是否选择了第$i$个数. 转移:$f[S] = \sum f[S-\{x\}]$且$x\in S$,当该子集所有元素的和为$b_1$或$b_2$时不转移. ...

  6. webpack 4 移除 CommonsChunkPlugin,取而代之的是两个新的配置项(optimization.splitChunks 和 optimization.runtimeChunk

    默认方式 webpack模式模式现在已经做了一些通用性优化,适用于多数使用者. 需要注意的是:默认模式只影响按需(on-demand)加载的代码块(chunk),因为改变初始代码块会影响声明在HTML ...

  7. PHP的陷阱

    PHP的陷阱 写代码的时候有个疑惑,那就是数组下标不存在的时候就会挂掉Undefined Index XXXX,这是对的,但是有时候他就不报错,这又是矛盾的. 请看下面的例子: $json_raw = ...

  8. transform-origin盒子旋转位置

    transform-Origin属性允许您更改转换元素的位置. 2D转换元素可以改变元素的X和Y轴. 3D转换元素,还可以更改元素的Z轴. 为了更好地理解Transform-Origin属性,请查看这 ...

  9. JVM垃圾收集策略与算法

    垃圾收集策略与算法 程序计数器.虚拟机栈.本地方法栈随线程而生,也随线程而灭:栈帧随着方法的开始而入栈,随着方法的结束而出栈.这几个区域的内存分配和回收都具有确定性,在这几个区域内不需要过多考虑回收的 ...

  10. VSCode实现文献管理

    1 常用文献管理软件 常用的文献管理软件有mendely,zotero,endnote和Papers(需要付费),具体对比参考链接1.1.1.2 笔者只用过Mendely,当时综合考虑挑了Endnot ...