我目前正在尝试使用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 :(得分: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找出正在运行的代码的哪个部分
从我的手机上发布这个等公共汽车,所以我为可能的疏忽道歉
编辑:看到其他答案后,只需结合我们的两个更正来解决案例