通过终端

时间:2016-11-29 12:50:08

标签: java colors drawing pen

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

生成的代码正确编译并且没有错误,但它不会改变笔的颜色!我要感谢一双专家的眼睛批评我的代码。

2 个答案:

答案 0 :(得分: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();实际上会丢弃用户输入...

答案 1 :(得分:0)

我只能猜测此代码段之外的代码是什么,但这是一个建议:

我的猜测是读者将输入字符串解析为空格分隔列表。如果是这样你应该在命令中的第二项上切换颜色,如下所示:

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

即使您键入“红色”并期望颜色发生变化。如果没有,则错误可能在其他地方,或者颜色更改代码不会首先运行。使用system.out.println找出正在运行的代码的哪个部分

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

编辑:看到其他答案后,只需结合我们的两个更正来解决案例