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


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

      运行结果

      沙鼠的号码:0,正在跳跃
      沙鼠的号码:1,正在跳跃
      沙鼠的号码:2,正在跳跃
      沙鼠的号码:3,正在跳跃
    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 = 0; i < 10; 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 = 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();
              }
          }
      
      }

      结果

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

      运行结果:

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

      运行结果

      Triangle
      Square
      Triangle
      Cycle1
      Cycle1
      Triangle
      Cycle1
      Square
      Triangle
    30. f
    31. afda
  • 相关阅读:
    CC
    codeforces 984 E. Elevator
    codeforces 984 D. XOR-pyramid
    codeforces 984 C. Finite or not?
    codeforces 984 B. Minesweeper
    codeforces 984 A. Game
    Loj #6000. 「网络流 24 题」搭配飞行员
    2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest 训练报告
    省赛训练 分块9题
    AC自动机 hdu 2222 Keywords Search
  • 原文地址:https://www.cnblogs.com/ITPower/p/8625624.html
Copyright © 2020-2023  润新知