坚持使用Java指令

时间:2016-02-23 23:39:11

标签: java

问题:

命令应作为文件传递给程序,每行一条指令。英语说明位于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");
    }
}

2 个答案:

答案 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.txtcat myfile.txt | grep "hello"完全相同。基本上,<是运行cat 文件 |的缩写命令。那么java ConsoleRobot < commands_in_english.txt意味着将commands_in_english.txt中的所有行传递给ConsoleRobot程序的搁浅输入。这意味着您只需将指令写入文件,然后运行该命令。