再谈菜单


题:
请你采用如下的节点结构实现菜单功能。

每个菜单项有4个指针:

parent: 指向父节点
child: 指向第一个孩子节点
left: 指向本节点的“哥哥”
right: 指向本节点的“弟弟”

显示孩子节点的时候,是按从长到幼的次序。

源码NTree1.java


package NTree1;

import java.util.ArrayList;
import java.util.List;

public class NTree1 {
    private List<Node> lst = new ArrayList<Node>();
    class Node {
        String data;//child
        String parent;
        String left;
        String right;
    }

    public void add(String parent, String data) {
        Node t = new Node();
        t.data = data;
        t.parent = parent;
        lst.add(t);
    }

    public String getParent(String x) {
        for (int i=0; i<lst.size(); i++ ) {
            if (lst.get(i).data.equals(x)) {  
                return lst.get(i).parent;
            }
        }
        return null;
    }
    
    public List<String> getChilden(String x) {
        List<String> t = new ArrayList<String>();
        for (int i=0; i<lst.size(); i++) {
            if (lst.get(i).parent.equals(x)) {
                t.add(lst.get(i).data);
            }
        }
        return t;
    }
    
    public String getChild(String x) {
        for (int i=0; i<lst.size(); i++) {
            if (lst.get(i).parent.equals(x)) {
                return lst.get(i).data;
            }
        }
        return null;
    }
    
    public String getLeft(String x) {
        String p = getParent(x);
        List<String> c = getChilden(p);
        for (int i=1; i<c.size(); i++) {
            if (c.get(i).equals(x)) {
                return c.get(i-1);
            }
        }
        return null;
    }
    
    public String getRight(String x) {
        String p = getParent(x);
        List<String> c = getChilden(p);
        for (int i=c.size()-1; i>=0; i--) {
            if (c.get(i).equals(x)) {
                return c.get(i+1);
            }
        }
        return null;
    }
}

源码2MyMenu.java


import java.util.Scanner;
import NTree1.NTree1;

class Menu1 {
    NTree1 t = new NTree1();
    
    public void add(String parent, String child) {
        t.add(parent, child);
    }
    
    public String go(String x) {
        Scanner sc = new Scanner(System.in);
        for (;;) {
            String a1 = t.getParent(x);
            String a2 = t.getChild(x);
            String a3 = t.getLeft(x);
            String a4 = t.getRight(x);

            System.out.println("now "+x);
            System.out.println("p. "+a1);
            System.out.println("c. "+a2);
            System.out.println("l. "+a3);
            System.out.println("r. "+a4);
            System.out.println("----------");
            
            String s = sc.nextLine();
            String x1 = "";
            if (s.equals("p")) {
                x1 = t.getParent(x);
                if (x1!=null) {
                    x = x1;
                    continue;
                }
                return x;
            }
            if (s.equals("c")) {
                x1 = t.getChild(x);
                if (x1!=null) {
                    x = x1;
                    continue;
                }
                return x;
            }
            if (s.equals("l")) {
                x1 = t.getLeft(x);
                if (x1!=null) {
                    x = x1;
                    continue;
                }
                return x;
            }
            if (s.equals("r")) {
                x1 = t.getRight(x);
                if (x1!=null) {
                    x = x1;
                    continue;
                }
                return x;
            }
            sc.close();
        }
        //return "quit";
    }
}

public class MyMenu {   
    public static void main(String[] args) {
        Menu1 m = new Menu1();
        m.add("水果", "苹果");
        m.add("水果", "香蕉");
        m.add("水果", "葡萄");
        m.add("苹果", "红富士苹果");
        m.add("苹果", "国光苹果");
        m.add("国光苹果", "富强1号");
        m.add("国光苹果", "富强2号");
        String t = m.go("水果");
        System.out.println("Ur Choice: " + t);
    }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注