0

我目前正在尝试用 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;
            }
        }
    }
}

生成的代码可以正确编译并且不会引发错误,但不会改变笔的颜色!如果有一双专家的眼睛来批评我的代码,我将不胜感激。

4

2 回答 2

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);    
}

因为在 if 条件中再次调用scannerC.nextLine();实际上会丢弃用户输入......

于 2016-11-29T13:01:32.460 回答
0

我只能猜测这段代码之外的代码做了什么,但这里有一个建议:

我的猜测是阅读器将输入字符串解析为空格分隔列表。如果是这样,您应该像这样在命令中的第二个项目上切换颜色:

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

也就是说,如果您键入“color red”并期望颜色发生变化。如果不是,则错误可能在其他地方,或者颜色更改代码一开始就没有运行。使用 system.out.println 找出正在运行的代码部分

从我的手机等公共汽车上发布这个,所以我为可能的疏忽道歉

编辑:在看到另一个答案后,只需结合我们的两个更正来解决这个问题

于 2016-11-29T13:19:47.360 回答