2016-11-29 62 views
0

我目前正在嘗試在Java中使用命令提示符在終端中控制筆來創建繪圖工具。通過終端在Java中改變筆的顏色

到目前爲止,我已經能夠實現命令來告訴筆移動,轉動等。現在,我試圖讓我的程序響應顏色命令,然後我嘗試將掃描儀放到閱讀下一個單詞。在我包含的代碼示例中,我試圖讓掃描儀檢測單詞「紅色」,然後更改筆的顏色(保留在「筆」類中的方法)。

所以,最好是在終端,我想鍵入:

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'列表中的其他「單詞」。 – RealSkeptic

+0

謝謝@RealSkeptic的編輯 - 我看到我使用了錯誤的格式來顯示Java代碼。謝謝。 :) – Garwaire

回答

0

我只能猜測這段代碼以外的代碼是什麼,但這裏有一個建議:

我的猜測是,閱讀器將輸入字符串解析爲空格分隔列表。如果是這樣,你應該切換顏色在第二項命令,像這樣:

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

如果鍵入「紅色」,並期望顏色要更改。如果沒有,錯誤可能在其他地方,或者顏色更改代碼不是首先運行。使用的System.out.println找出代碼的一部分正在運行

從手機等一輛公交車張貼這讓我對可能的疏忽道歉

編輯:看到對方的回答後,只是結合我們的兩個解決方案的更正

+0

我試過這個無濟於事......但後來發現我需要插入'break'到每一行。這完美的作品!非常感謝@ 7H3_H4CKER! – Garwaire

0

這是在代碼

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

一個錯誤,如果必須colour.equalsIgnoreCase("red")

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

因爲再次調用在scannerC.nextLine();如果條件實際上將放棄用戶輸入...

+0

啊哈!非常感謝你,雖然這並不能100%解決我的意圖,但你已經設法讓我的代碼工作的frankenstein。乾杯! 現在發生的事情是在終端I中輸入: > color red ...但它然後返回一個空行,我必須鍵入'紅'才能獲得顏色變化,否則我會得到我的「無法識別的顏色「錯誤。儘管如此,我很感謝您的協助。猜猜我會嘗試實施拆分或其他... – Garwaire

+0

儘管它有幫助,我覺得我從你的答案中學到了一些東西,但我沒有在最終的代碼中實現它。儘管如此,非常感謝。 :) Upvoted。 – Garwaire