问题:
命令应作为文件传递给程序,每行一条指令。英语说明位于english.txt中的文件命令中,西班牙语说明位于spanish.txt中的文件命令中。您可以按照以下说明调用程序:
java ConsoleRobot < commands_in_english.txt
或
java ConsoleRobot < commands_in_spanish.txt
我不明白问题是什么?它是否要我输入的命令转到英文文本文件,还是要我将所有命令存储在英文文本文件中?
Here是完整问题的链接。除了最后一部分,我得到了所有这些。 Here是我的Java文件的链接。
import java.util.Scanner;
public class ConsoleRobot extends SmarterRobot {
public static void main(String [] args) {
World yard = new World();
SmarterRobot ringo = new SmarterRobot();
yard.add(ringo,5,4);
yard.addBeeper(5,9);
yard.addBeeper(4,5);
yard.addBeeper(9,4);
yard.addBeeper(9,5);
Scanner scan = new Scanner(System.in);
System.out.println("Enter a command: | Introduzca un comando:");
String command = scan.nextLine();
command = command.toLowerCase();
while (!command.equals("stop") && !command.equals("detener")) {
if ( command.equals("forward") || command.equals("adelante")) {
System.out.println("How far should the robot move?");
int input = scan.nextInt();
ringo.moveNumOfTimes(input);
} else if ( command.equals("right") || command.equals("derecha"))
ringo.turnRight();
else if ( command.equals("left") || command.equals("izquierda")
ringo.turnLeft();
else if ( command.equals("collect") || command.equals("recoger"))
ringo.pickBeeper();
else if ( command.equals("drop") || command.equals("soltar"))
ringo.putBeeper();
System.out.println("Enter a command: | Introduzca un comando:");
command = scan.nextLine();
}
System.out.println("Finished | Terminado");
}
}
答案 0 :(得分:1)
您无需执行任何代码即可接受使用&lt;传递的文件。运营商。正如Majora320所写,&lt; operator将文件呈现为标准输入。在其他情况下,您的应用程序将从文件中读取命令,就好像它是从键盘输入的一样。
问题在于scan.nextLine()调用。这读取整行,这使得带有参数的不可能的处理命令,例如前进10 ,因为你读了整行,而不仅仅是命令。
下面的示例首先读取一个字符串(in.next()),并且如果预期命令具有参数,则可以继续读取参数(in.nextInt())。但它没有读取停止命令的任何参数。
public class Robot {
public static void main(final String[] args) {
final Scanner in = new Scanner(System.in);
while (in.hasNext()) {
final String command=in.next();
if (command.equals("forward")) {
final int distance=in.nextInt();
System.out.println("Forwarding "+distance);
}
if (command.equals("stop")) {
System.out.println("Stopping");
}
}
}
}
另一个小问题是,在获得停止命令之前,您一直在阅读输入。这意味着没有结束停止的命令文件不会停止您的应用程序。在阅读之前阅读更安全,即使用while(in.hasNext())继续阅读。
请注意缩进和空行如何使代码更易读,更容易理解。
答案 1 :(得分:0)
<
运算符(至少在* nix终端上)用于将文本从文件传递到程序的搁浅输入。例如,grep "hello" < myfile.txt
与cat myfile.txt | grep "hello"
完全相同。基本上,<
是运行cat 文件 |的缩写命令。那么java ConsoleRobot < commands_in_english.txt
意味着将commands_in_english.txt
中的所有行传递给ConsoleRobot
程序的搁浅输入。这意味着您只需将指令写入文件,然后运行该命令。