如何在Java输入控制台中拥有多个命令

时间:2014-10-31 22:14:22

标签: java

好的,我正在开发类似Windows CMD的东西,但没有访问命令。它将有来自我和我的朋友的命令,但是当我添加第二个命令并测试它时,它不起作用。如果有人可以帮助我,我很乐意做到这一点。

import java.util.*;

public class Console {

private static final Scanner cmd = null;
public static void main(String[] args)
{
    cmd();
}
private static void cmd()
{
    System.out.print(">");
    final Scanner cmd = new Scanner(System.in);

    if (cmd.next("help") != null)
    {
        help();
    }

    if(cmd.next("ping") != null)
    {
        ping();
    }

}



private static void ping() {

    System.out.println("Pong!");

}
private static void help() {
    System.out.println("ADD" + "                     Adds 2 numbers");
    System.out.println("SUBTRACT" + "                Subtracts 2 numbers");
    System.out.println("MULTIPLY" + "                Multiplies 2 numbers");
    System.out.println("PING" + "                    Pong!");
    cmd();
}

}

4 个答案:

答案 0 :(得分:0)

您的程序有一些错误。第一个是用于获取用户输入的方法不正确。您应该使用Scanner.nextLine()方法,这将读取用户输入,直到读取新的行字符(AKA,他们按Enter键)。进行此修改将使您的cmd()方法读取如下内容:

System.out.print(">");
final Scanner cmd = new Scanner(System.in);
String userInput = cmd.nextLine();
if (userInput.equals("help")) {
    help();
} else if(userInput.equals("ping")) {
    ping();
}

此外,help()方法中有一些非常糟糕的juju。在help()方法中,您再次调用cmd()方法。要理解为什么这很糟糕让我给你一个场景。假装您的计划有效,这是您的用户输入,而-- help outputlisted方法打印出的是help

>help
-- help outputlisted
>help
-- help outputlisted
>help
-- help outputlisted

你的程序会发生什么,这些方法都不会终止。你最终会得到一个这样的调用栈:

cmd()
    help()
        cmd()
            help()
                cmd()
                    help()
                    ......on and on and on.....

cmdhelp方法都不会终止!你实际上是在使用递归,如果使用这种设计模式构建更多方法,你肯定会遇到奇怪的问题。底线是它的坏形式。

您应该做的是在cmd方法中使用循环。下面的循环将继续提示用户输入,直到该行显示"quit"。当用户输入quit时,循环将终止,cmd()方法将结束。

final Scanner cmd = new Scanner(System.in);
String userInput = null;
do {
    System.out.print(">");
    userInput = cmd.nextLine();
    if (userInput.equals("help")) {
        help();
    } else if(userInput.equals("ping")) {
        ping();
    }
} while(userInput != null && !userInput.equals("quit"));

同时从您的cmd()方法移除help()来电。


您有一个名为static final的{​​{1}}变量。 java中的静态变量应遵循UPPER_SNAKE_CASE命名约定。您也可以重命名变量或方法。将它们命名为cmd可能不是最好的,也不是非常具有描述性。

答案 1 :(得分:0)

public static void main(String[] args) {
    cmd();
}

private static void cmd() {
    Scanner input = new Scanner(System.in);

    System.out.print("> ");
    String command = input.next();

    while (!command.equals("exit")) {

        if (command.equals("help")) {
            help();
            System.out.print("> ");
            command = input.next();
        } else if (command.equals("ping")) {
            ping();
            System.out.print("> ");
            command = input.next();
        }
    }
}

private static void ping() {
    System.out.println("Pong!");
}

private static void help() {
    System.out.println("ADD" + "                     Adds 2 numbers");
    System.out.println("SUBTRACT" + "                Subtracts 2 numbers");
    System.out.println("MULTIPLY" + "                Multiplies 2 numbers");
    System.out.println("PING" + "                    Pong!");
}

答案 2 :(得分:0)

从这里你可以想到你缺少的其他方法。

import java.util.*;

public class Console {

static Scanner cmd = new Scanner(System.in);
public static Boolean Exit = false;

public static void main(String[] args)
{
    do {
        cmd();
    } while(!Exit);
}

private static void cmd()
{
    String Command;
    System.out.print(">");
    Command = cmd.nextLine().trim();

    if (Command.equalsIgnoreCase("help")) {
        help();
    }
    else if (Command.equalsIgnoreCase("ping")) {
        ping();
    }
    else if (Command.equalsIgnoreCase("exit")) {
        Exit = true;
    }
    //Here Add more else if as are created more methods.
    else {
        System.out.println("Unrecognized command!");
    }          
}

private static void ping() {
    System.out.println("Pong!");
}

private static void help() {
    System.out.println("ADD" + "                     Adds 2 numbers");
    System.out.println("SUBTRACT" + "                Subtracts 2 numbers");
    System.out.println("MULTIPLY" + "                Multiplies 2 numbers");
    System.out.println("PING" + "                    Pong!");
    System.out.println("EXIT" + "                    End of Program!");
}
}

答案 3 :(得分:-3)

为什么不使用这样的东西

import java.util.Scanner;

Scanner keyboard = new Scanner(System.in);
System.out.println("Enter command: ");
String cmd = keyboard.nextLine();
if (cmd == "help"){
help();
}