首页 > 代码库 > 用java面向对象的思想实现的汉诺塔问题
用java面向对象的思想实现的汉诺塔问题
package hanoi.com;public class Disc { private String name; private int level; public Disc(){ name = "disc"; level = 0; } public Disc(String name, int level){ this.name = name; this.level = level; } public String getName() { return name; } public int getLevel() { return level; } @Override public String toString() { return "name: " + this.name + ";level: " + this.level; }}
package hanoi.com;import java.util.LinkedList;import java.util.List;public class Post { //用来装Disc private List<Disc> lists = new LinkedList<Disc>(); private String name;public String getName() { return name; } public Post(String name) { this.name = name; } public void add(Disc disc) { if(disc == null) return; this.lists.add(0, disc); } public void add(List<Disc> discs) { if (discs == null || discs.size() < 1) { return; } lists.addAll(0, discs); } //当前柱子中的盘子借助middlePost移到到targetPost public void move(Post middlePost, Post targetPost,PostMove postMove){ this.move(this.lists.size(), middlePost, targetPost, postMove); } private void move(int total, Post post1, Post post2,PostMove postMove) { if(total <= 0) return; this.move(total - 1, post2, post1,postMove); Disc disc = this.lists.remove(0); if(postMove != null){ postMove.action(this, post1,post2, disc); } post2.add(disc); post1.move(total -1 ,this, post2,postMove); } @Override public String toString() { return "Post [lists=" + lists + ", name=" + name + "]"; }}
package hanoi.com;public interface PostMove { public void action(Post scrPost,Post middlePost, Post targetPost, Disc disc);}
package hanoi.com.test;import hanoi.com.Disc;import hanoi.com.Post;import hanoi.com.PostMove;public class Main { public static void main(String[] args) { Post post1 = new Post("A"); Post post2 = new Post("B"); Post post3 = new Post("C"); post1.add(new Disc("3", 2)); post1.add(new Disc("2", 1)); post1.add(new Disc("1", 0)); System.out.println(post1); System.out.println(post2); System.out.println(post3); post1.move(post2, post3, new PostMove() { @Override public void action(Post srcPost, Post middlePost,Post targetPost, Disc disc) { System.out.println(disc + ":从"+ srcPost.getName() + "通过" + middlePost.getName() + "到达" + targetPost.getName()); } }); System.out.println(post1); System.out.println(post2); System.out.println(post3); }}
用java面向对象的思想实现的汉诺塔问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。