专栏首页盛开在夏天的太阳java编程思想第四版第十一章习题

java编程思想第四版第十一章习题

  1. 第一题 运行结果 沙鼠的号码:0,正在跳跃 沙鼠的号码:1,正在跳跃 沙鼠的号码:2,正在跳跃 沙鼠的号码:3,正在跳跃
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());
        }
    }
}
  1. 第二题
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 = 0; i < 10; i++){
            c.add(i);
        }
        for(Integer i: c){
            System.out.print(i + ",");
        }
    }

}
  1. 第三题 结果 对象0对象1对象2对象3对象4对象5对象6对象7对象8对象9 分析: 这个案例的重点是, 数组瘦受限制的, 集合是没有元素个数限制的。 因此,可以任意添加元素的意思就是:将数组替代为集合。
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 = 0;
    //定义数组的个数
    public Sequence(){
        items = new ArrayList<Object>();
    }
    //添加
    public void add(Object x){
        items.add(x);
    }
    
    //内部类--顺序选择器
    private class SequenceSelector implements Selector {
        //选择器最开始指向第一个元素
        private int i = 0;
        @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=0; i<10; i++){
            s.add("对象"+i);
        }
        Selector selector = s.selector();
        while(!selector.end()){
            System.out.print(selector.current());
            selector.next();
        }
    }

}
  1. 第四题 运行结果:
[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]
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+1) % moives.length;
        return moive;
    }
    
}
public class MoiveGenerator {
    MoiveNameGenerator moiveNameGenerator = new MoiveNameGenerator();
    public String[] fill(String[] arr){
        for(int i=0; i<arr.length; i++){
            arr[i] = moiveNameGenerator.next();
        }
        return arr;
    }
    
    public Collection fill(Collection col){
        for(int i=0; i<5; 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[5])));
        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>()));
    }
}
  1. dff
  2. af
  3. a
  4. fa
  5. fda
  6. sf
  7. af
  8. as
  9. fa
  10. fa
  11. 栈在编程语言中,经常用来对表达式求值。请使用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;

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

}
  1. fda
  2. fa
  3. fa
  4. dfa
  5. fa
  6. df
  7. asfd
  8. afa
  9. fa
  10. fa
  11. fa
  12. 二十七题 运行结果: A AB ABC VFA SDA
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);

    }
}
  1. fa
  2. 第三十一题 运行结果 Triangle Square Triangle Cycle1 Cycle1 Triangle Cycle1 Square Triangle
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(47);

    private final int quantity;

    public RandomShapeFactory(int quantity) {
        this.quantity= quantity;
    }

    // 下面画什么形状呢
    public Shape nextShape() {
        switch (random.nextInt(4)) {
        default:
        case 0:
            return new Cycle1();
        case 1:
            return new Square();
        case 2:
            return new Triangle();
        case 3:
            return new Trapezoid();
        }
    }

    @Override
    public Iterator<Shape> iterator() {
        return new Iterator<Shape>() {
            private int count = 0;

            @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(9);
        for (Shape s : rd) {
            System.out.println(s.getClass().getSimpleName());
        }

    }

}
  1. f
  2. afda

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java编程思想第四版第九章习题

    用户7798898
  • java编程思想第四版第十章习题

    用户7798898
  • java编程思想第四版第七章总结

      忠告:再设计类的时候, 将方法定义为final的,应该说是明智的。你可能会觉得,没人想要覆盖你的方法,但预见类是如何被复用是很困难的, 特别是对于一个通用类...

    用户7798898
  • 常见设计模式面试必备

    1、单例类只有一个实例对象; 2、该单例对象必须由单例类自行创建; 3、单例类对外提供一个访问该单例的全局访问点;

    挨踢小子部落阁
  • 《你必须知道的.NET》读书笔记二:小OO有大原则

    此篇已收录至《你必须知道的.Net》读书笔记目录贴,点击访问该目录可以获取更多内容。

    Edison Zhou
  • Java描述设计模式(12):外观模式

    知了一笑
  • Java开发小技巧_02

    jeremyxu
  • 11 - JavaSE之GUI

    PS: Panel 的 setBounds 方法中设置的位置大小是相对于相对装入的 Frame 窗口位置和大小的。

    Daotin
  • Java 接口

    如果一个类中只有抽象方法和全局常量所组成;在这类情况下不会将其定义为抽象类,而只会将其定义为“接口”;严格来讲:接口就属于一个特殊的类,而且这个类里面只有抽象方...

    Mirror王宇阳
  • Java设计模式-装饰模式

    装饰模式:简单的来说就是动态的给一个对象增加额外的功能,就单纯的新增功能来说会比单一的给一个子类新增功能来的灵活,是跟代理模式中的静态代理模式和动态代理模式十分...

    cwl_java

扫码关注云+社区

领取腾讯云代金券