2017-02-08 9 views
0

チューリングマシンの基本機能をコーディングしようとしています。以下に示すように はこれまでのところ、プログラムがリストにユーザーの入力と保存、それを取る:複数の入力をスキャンして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. ユーザ入力= 1、R = 0、R

  2. プログラムは全て、= 1ヘッダーの下のセルを作る右に移動し、= 0、右再び移動します1回の実行で。

*私は、各入力後にコマンドを要求し、入力を終了すると入力を終了しません。私はSecondMenuをいつでもプログラムの起動時以外に表示させたくありません。

*プログラム実行後に100個の入力を入力してリストに格納し、プログラムをアレイ全体で繰り返し、1回の実行で100個のコマンドすべて(ユーザー入力に基づいて)を実行できるようにしたい。 forループ、whileループ、iteratorを使用しようとしましたが(使用方法がわからず、間違っている可能性があります)

説明のために編集しました。

+0

だから何が配列に各入力を追加することからあなたを停止していますまたは一覧をループし、配列またはリストをループし、それぞれに対してRunCmd()を呼び出します。 –

+0

私はそれをforループを使って試しました。たぶん私は間違っていたが、それは私が望んでいたようにうまくいかなかった。 –

答えて

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 :) 
    } 
} 
+0

明確にするために、SecondMenu()は基本的に、特定の入力で何が入力されるかを示すメニューです。私はメニューが各入力を入力した後に表示を停止したい、そして、私は(メニューの入力をリストに保存することによって)メニュー上のすべての入力をスパムすることができるようにしたい、そして、また、入力したすべての入力に基づいて実行することもできます。 –

+0

SecondMenu()がJFrameやその他のGUIによってサポートされているかどうかわかりません。 "-n 5"のような入力コマンドライン引数はすべて同じ行にあるのか、それとも別々の行にコマンドを分けるのでしょうか? – Falcinspire

+0

コマンドを別々の行に区切ります。 RunCmdには、どのようなコマンドの例があります。いくつかはシンボルです。ほとんどの手紙。 –

関連する問題