通过终端更改 Java 中的笔的颜色
Changing the colour of a pen in Java via terminal
我目前正在尝试在 Java 中构建一个绘图工具,在终端中使用命令提示控制一支笔。
到目前为止,我已经能够执行命令让笔移动、转动等。现在,我试图让我的程序响应颜色命令,然后我尝试安装扫描仪阅读下一个单词。在我包含的代码示例中,我尝试让扫描仪检测单词 "red",然后更改笔的颜色(该方法保留在 "Pen" class 中) .
所以,理想情况下,我想在终端中输入:
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;
}
}
}
}
生成的代码编译正确并且没有抛出任何错误,但它不会改变笔的颜色!如果有一双专家的眼睛来批评我的代码,我将不胜感激。
这是代码中的一个错误
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();
实际上会丢弃用户输入...
我只能猜测这段代码之外的代码做了什么,但这里有一个建议:
我的猜测是 reader 将输入字符串解析为 space 分隔列表。如果是这样,您应该像这样在命令中的第二项上切换颜色:
switch(command.get(1).toLowerCase){
case "red":
...
case "blue":
...
...
default:
System.out.println("Unrecognized color");
}
也就是说,如果您键入 "color red" 并希望颜色发生变化。如果不是,则错误可能出在其他地方,或者颜色更改代码一开始就不是 运行。使用 system.out.println 找出代码的哪一部分 运行
这是我在phone等公交车时发的,所以我为可能的疏忽道歉
编辑:看到其他答案后,只需结合我们的两个更正即可解决此问题
我目前正在尝试在 Java 中构建一个绘图工具,在终端中使用命令提示控制一支笔。
到目前为止,我已经能够执行命令让笔移动、转动等。现在,我试图让我的程序响应颜色命令,然后我尝试安装扫描仪阅读下一个单词。在我包含的代码示例中,我尝试让扫描仪检测单词 "red",然后更改笔的颜色(该方法保留在 "Pen" class 中) .
所以,理想情况下,我想在终端中输入:
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;
}
}
}
}
生成的代码编译正确并且没有抛出任何错误,但它不会改变笔的颜色!如果有一双专家的眼睛来批评我的代码,我将不胜感激。
这是代码中的一个错误
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();
实际上会丢弃用户输入...
我只能猜测这段代码之外的代码做了什么,但这里有一个建议:
我的猜测是 reader 将输入字符串解析为 space 分隔列表。如果是这样,您应该像这样在命令中的第二项上切换颜色:
switch(command.get(1).toLowerCase){
case "red":
...
case "blue":
...
...
default:
System.out.println("Unrecognized color");
}
也就是说,如果您键入 "color red" 并希望颜色发生变化。如果不是,则错误可能出在其他地方,或者颜色更改代码一开始就不是 运行。使用 system.out.println 找出代码的哪一部分 运行
这是我在phone等公交车时发的,所以我为可能的疏忽道歉
编辑:看到其他答案后,只需结合我们的两个更正即可解决此问题