好的,我正在开发类似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();
}
}
答案 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.....
cmd
或help
方法都不会终止!你实际上是在使用递归,如果使用这种设计模式构建更多方法,你肯定会遇到奇怪的问题。底线是它的坏形式。
您应该做的是在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();
}