2016-11-29 21 views
0

私は現在、端末でコマンドプロンプトを使ってペンを制御して、Javaで描画ツールを構築しようとしています。端末からJavaのペンの色を変更する

これまで私は、ペンに移動や回転などを指示するコマンドを実装することができました。今、私のプログラムがカラーコマンドに応答するようにしようとしています。次の言葉を読んでください。私がインクルードしたコードの例では、スキャナに単語 "red"を検出させてからペンの色を変更しようとしました(このメソッドは "Pen"クラスに保持されています)。

ので、理想的には端末では、私が入力したいと思います:

colour red 

...と赤にペンの色を変更する結果のアクションを取得します。

また、事前にお申し出ください。あなたが助けることができる前に知っておくべきことが他にあれば、私に知らせてください!

/** 
* Allow the user to draw on the canvas by typing commands. 
*/ 
public void draw() 
{ 
    boolean finished = false; 

    printWelcome(); 
    printPenLocation(); 
    while(!finished) { 
     LinkedList<String> command = reader.getInput(); 
     if(!command.isEmpty()) { 
      String firstWord = command.get(0); 
      switch(firstWord) { 
    //Had more examples of case commands here, such as "move", "help", etc ... 
       case "colour": 
        Scanner scannerC = new Scanner(System.in); 
        String colour = scannerC.nextLine(); 
        if (scannerC.nextLine().equalsIgnoreCase("red")) 
        { 
         pen.setColor(Color.RED);  
        } 
        else { 
         System.out.println("Unrecognised colour!"); 
        } 
        break; 
       default: 
        System.out.println("Unrecognised command: " + firstWord); 
        break; 
      } 
     } 
    } 
} 

結果のコードは正しくコンパイルされ、エラーは発生しませんが、ペンの色は変わりません!私のコードを批判するために、専門家の目のペアに感謝します。

+0

同じ入力ストリームに複数の入力読み取りクラス(スキャナ、リーダー)を持つことは想定されていません。これにより、それぞれがデータをバッファに読み込む際に問題が発生します。代わりに 'command'リストの他の" words "を見てください。 – RealSkeptic

+0

@RealSkepticありがとうございました。私はJavaコードを表示するために間違ったフォーマットを使用しています。ありがとう。 :) – Garwaire

答えて

0

コード

String colour = scannerC.nextLine(); 
if (scannerC.nextLine().equalsIgnoreCase("red")) 
{ 
pen.setColor(Color.RED);  
} 

で間違いです私はこのスニペットの外のコードは何を推測することができますが、ここに提案があります:

私の推測では、読者は入力文字列をスペース区切りのリストとして解析します。それがそうであるならば、あなたはそうのようなコマンドで2番目の項目の上に色を切り替える必要があります:あなたは「赤色」と入力し、色を変更することが予想される場合

switch(command.get(1).toLowerCase){ 
case "red": 
    ... 
case "blue": 
    ... 
... 
default: 
    System.out.println("Unrecognized color"); 
} 

であること。そうでない場合は、エラーが他の場所にあるか、色変更コードが最初に実行されていない可能性があります。他の答えを見た後、ちょうどコンバイン:バスを待って自分の携帯電話から、これを転記実行

ているので、私は可能見落としのため

編集を謝罪されたコードのどの部分を見つけるためにするSystem.out.printlnを使用両方のケースを解決するための私たちの訂正

+0

私はこれを無駄にしようとしました...しかし、私は 'break;これらの行のそれぞれにこれは完全に動作します!非常に@ 7H3_H4CKERありがとう! – Garwaire

0

colour.equalsIgnoreCase("red")

String colour = scannerC.nextLine(); 
if (colour.equalsIgnoreCase("red")) 
{ 
pen.setColor(Color.RED);  
} 

条件が実際にユーザーの入力を破棄するかどうか再度scannerC.nextLine();を呼び出すためでなければならない場合、これは...

+0

ああ!ありがとう、私はそれを意図した方法を100%解決していませんが、あなたはコードの私のフランケンシュタインを働かせてきました。乾杯! 今は何が起きているのですか? >赤色ですが、色を変更するために「赤」で入力する必要がある空白行が返されます。そうでなければ、「認識できない色"エラー。それにもかかわらず、私はあなたの援助に感謝しています。私はスプリットか何かを実装しようとしますね... – Garwaire

+0

それは助けをしてくれましたが、あなたの答えから何かを学んだと感じました。私は最終的なコードにそれを実装しませんでした。それでも、おかげです。 :) Upvoted。 – Garwaire

関連する問題