2016-11-29 4 views
0

В настоящее время я пытаюсь создать инструмент рисования на Java, управляя ручкой, используя командные подсказки в терминале.Изменение цвета пера в Java через терминал

До сих пор я мог реализовывать команды, чтобы передать перо для перемещения, поворота и т. Д. Теперь я пытаюсь заставить свою программу отвечать на команду цвета, а затем попытался вставить сканер в прочитайте следующее слово. В примере кода, который я включил, я попытался заставить сканер обнаружить слово «красный», а затем изменить цвет пера (метод, который хранится в классе «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'. – RealSkeptic

+0

Спасибо @RealSkeptic за это редактирование - я вижу, что я использовал неправильный формат для отображения кода Java. Благодарю. :) – Garwaire

ответ

0

Я могу только догадываться, что делает код за пределами этого фрагмента, но вот предложение:

Я предполагаю, что читатель анализирует входную строку как список, разделенный пробелом. Если это так, вы должны переключить цвет по второму элементу в команде так:

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

То есть, если вы наберете «красный цвет» и ожидаем, что цвет меняется. Если нет, ошибка может быть где-то в другом месте или код изменения цвета не запускается в первую очередь. Используйте System.out.println, чтобы выяснить, какая часть кода выполняющиеся

Проводка это от моего телефона, ожидая автобуса, поэтому я прошу прощения за возможные оплошности

Edit: после просмотра другого ответа, просто объединить обе наши поправки для решения проблемы

+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

Aha! Большое вам спасибо, хотя это не на 100% решает, как я намеревался это сделать, вам удалось заставить мой frankenstein работать с кодом. Ура! Что происходит сейчас в терминале I типа: > цвет красный ... но затем он возвращает пустую строку, где я должен вводить «красный», чтобы получить изменение цвета, иначе я получаю свой «нераспознанный цвет» " ошибка. Тем не менее, я благодарен вам за помощь. Думаю, я попробую реализовать раскол или что-то еще ... – Garwaire

+0

Хотя это помогло, и я чувствую, что узнал что-то из вашего ответа, я не реализовал его в конечном коде. Тем не менее, спасибо все равно. :) Приобретено. – Garwaire

Смежные вопросы