チューリングマシンの基本機能をコーディングしようとしています。以下に示すように はこれまでのところ、プログラムがリストにユーザーの入力と保存、それを取る:複数の入力をスキャンして1回実行する
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、R = 0、R
プログラムは全て、= 1ヘッダーの下のセルを作る右に移動し、= 0、右再び移動します1回の実行で。
*私は、各入力後にコマンドを要求し、入力を終了すると入力を終了しません。私はSecondMenuをいつでもプログラムの起動時以外に表示させたくありません。
*プログラム実行後に100個の入力を入力してリストに格納し、プログラムをアレイ全体で繰り返し、1回の実行で100個のコマンドすべて(ユーザー入力に基づいて)を実行できるようにしたい。 forループ、whileループ、iteratorを使用しようとしましたが(使用方法がわからず、間違っている可能性があります)
説明のために編集しました。
だから何が配列に各入力を追加することからあなたを停止していますまたは一覧をループし、配列またはリストをループし、それぞれに対してRunCmd()を呼び出します。 –
私はそれをforループを使って試しました。たぶん私は間違っていたが、それは私が望んでいたようにうまくいかなかった。 –