一次扫描并运行多个输入

时间:2017-02-08 02:54:17

标签: java arraylist iteration turing-machines

我正在尝试编写图灵机的基本功能。 到目前为止,该程序接受用户输入并将其存储到List中,如下所示:

    public String cmdLoop()
{

    Scanner getReq = new Scanner( System.in );

    for( ; ; )
    {

        say( "current read/write head position: " + currHeadPos );
        say( "" );

        SecondMenu();
        say( "Type commands here:");

        ArrayList<String>inputs = new ArrayList<String>();
        String userInput = getReq.nextLine();
        do{
            userInput = getReq.nextLine();
            inputs.add(userInput);


                RunCmd(userInput);

        }
        while(!userInput.equals("Done"));
    }
}

SecondMenu如下

    public void SecondMenu()
{
    say( "\t?\tprint current cell"                );
    say( "\t=\tassign new symbol to current cell" );
    say( "\tE\terase current cell"                );
    say( "\tL\tmove head to left"                 );
    say( "\tR\tmove head to right"                );
    say( "\tB\trewind to beginning of tape"       );
    say( "\tD\tdump contents of tape"             );
    say( "\tT\tset Transition commands"          );
}

public void  say( String  s )
{
    System.out.println( s );
}

每个输入都是一个命令。换句话说,程序的运行方式取决于用户键入的内容,运行这些命令的方法称为RunCmd。这些命令的一些示例如下。

    void RunCmd(String userInput)

{       char command = userInput.charAt(0);         
        say("");

        if(command == '?')
        {
            dumpTape(currHeadPos, currHeadPos + 1);
        }
        else
        if(command == '=')
        {

            tapeContents[currHeadPos] = userInput.charAt(1);
            if( endOfTape == 0 )
            {
                endOfTape++;
            }
        }
        else
        if( command == 'E' )
        {
            //use a space to signal 'empty' so that cells will print out ok
            tapeContents[ currHeadPos ] = ' ';
        }
        else
        if( command == 'L' )
        {
            if( currHeadPos == 0 )
            {
                say( "" );
                say( "Tape rewound, unable to move LEFT" );
            }
            else
            {
                currHeadPos--;
            }
        }
        else
        if( command == 'R' )
        {
            currHeadPos++;
            endOfTape++;
        }

如何让程序迭代循环并立即运行所有输入命令? 例如:

  1. 用户输入= 1,R,= 0,R

  2. 程序会使标题下的单元格= 1,向右移动,= 0,再次向右移动,一次运行。

  3. *我不希望程序在每次输入后询问命令,并输入“完成”。将结束投入。我不希望程序在程序启动之外的任何时间显示SecondMenu。

    *我想能够在程序运行后输入100个输入,将它们存储在List中,让程序遍历数组并在一次运行中运行所有100个命令(基于用户输入)。 我尝试过使用for循环,while循环和迭代器(虽然我不知道如何使用它并且可能做错了)

    编辑澄清。

1 个答案:

答案 0 :(得分:0)

“过早优化是所有邪恶的根源”

您的问题让我感到困惑,但我希望这可以提供帮助:

public static void main(String[] args)
{
    Scanner getReq = new Scanner( System.in );

    List<String> commands = new ArrayList<String>();
    String command;
    while (!(command = getReq.nextLine().trim()).equalsIgnoreCase("end"))
    {
        commands.add(command);
    }
    runCmds(commands);
}

private static void runCmds(List<String> userInputs)
{
    for (String userInput : userInputs)
    {
       //your insanity here :)
    }
}