オートマタの問題 【Javaのサンプルコード】

Print Friendly, PDF & Email

ここでは、当社の新人研修受講者に向けて、Javaのサンプルコードを紹介しています。

オートマタの問題

以下は、電球のスイッチの状態遷移を表現したプログラムです。

このプログラムを解釈しなさい。

public class Node {

    private String nodeStatus;
    private String[] nextChar;
    private Node[] nextNode;

    public Node(String nodeStatus, String[] nextChar, Node[] nextNode) {
        this.nodeStatus = nodeStatus;
        this.nextChar = nextChar;
        this.nextNode = nextNode;
    }

    public String getNo() {
        return nodeStatus;
    }

    public void setNext(String str, Node nd) {
        int i = 0;
        while (i < nextChar.length && i < nextNode.length && nextNode[i] != null) {
            i++;
        }

        if (i < nextChar.length && i < nextNode.length) {
            nextChar[i] = str;
            nextNode[i] = nd;
        }
    }

    public Node getNext(char ch) {
        for (int i = 0; i < nextChar.length && i < nextNode.length; i++) {
            if (nextChar[i].indexOf(ch) >= 0) {
                return nextNode[i];
            }
        }
        return this;
    }
}
public class Automata {

    public static void main(String[] args) {
        Node off = new Node("OFF", new String[2], new Node[2]);
        Node on = new Node("ON", new String[2], new Node[2]);
 
        off.setNext("1", on);
        off.setNext("0", off);
        on.setNext("0", off);
        on.setNext("1", on);
                
        String str = "1000001";
        Node n = off;
        for (int i = 0; i < str.length(); i++) {
            n = n.getNext(str.charAt(i));
        }
        System.out.println(n.getNo());
    }
}