命令解释器的问题
Trouble with command intepreter
各位晚上好,
我正在为 uni 做一个项目,我发现自己有点小题大做。
我的命令解释器有问题。
我可以获得 运行 的代码,但不幸的是它没有正确读取我的输入。
有人能指出我接近错误的正确方向吗?
代码如下,忽略评论和其他支持类的实例。
任何帮助,将不胜感激。
提前致谢!
import java.util.Scanner;
public class Main {
//Constantes que definem os comandos
public static final String REGISTER = "register";
public static final String LISTUSERS = "listusers";
public static final String UPLOAD = "upload";
public static final String READ = "read";
public static final String WRITE = "write";
public static final String GRANT = "grant";
public static final String REVOKE = "revoke";
public static final String USERDOCS = "userdocs";
public static final String TOPLEAKED = "topleaked";
public static final String TOPGRANTERS = "topgranters";
public static final String HELP = "help";
public static final String EXIT = "exit";
//Constantes que definem as mensagens para o utilizador
public static final String EXIT_COMM = "Bye!";
public static final String REGISTER_COMM = " was registered.";
public static final String ALREADY_REG_ERROR = " is already assigned to another user.";
public static final String NO_LIST_USERS = "There are no registered users.";
public static final String DOC_UPLOADED = " was uploaded.";
public static final String OFFICIAL_DOC = "Contact upda1ted.";
public static final String TOPSECRET_DOC = "Contact book empty.";
public static final String CONFIDENTIAL_DOC = "Phone number does not exist.";
public static final String CONTACT_SHARE_PHONE = "There are contacts that share phone numbers.";
public static final String HELP_COMM = "register - registers a new user /n";
public static void main(String[] args) {
System.out.println("Welcome!");
//WeKeepSecrets app = new WeKeepSecretsClass();
Scanner in = new Scanner(System.in);
String comm = getCommand(in);
while (!comm.equals(EXIT)){
switch (comm) {
case HELP:
System.out.println(HELP);
default:
System.out.println("ERRO");
break;
}
comm = getCommand(in);
}
System.out.println(EXIT_COMM);
in.close();
}
private static String getCommand(Scanner in) {
String input;
input = in.nextLine().toUpperCase();
return input;
}
}
您的命令都是小写的,但您正在将用户输入转换为大写。转为小写。
input = in.nextLine().toLowerCase();
您可能还想将 break
添加到 HELP 命令中:
case HELP:
System.out.println(HELP);
break;
在 HELP
的 case
中缺少 break
。请注意,最后一个 case
中不需要 break
,即 default
。
- case 中的值应该匹配字符串常量的值,因此,从返回的字符串中删除
toUpperCase()
。
- 此外,使用
do...while
避免使用 comm = getCommand(in);
两次。
下面是更正后的代码:
import java.util.Scanner;
public class Main {
// Constantes que definem os comandos
public static final String REGISTER = "register";
public static final String LISTUSERS = "listusers";
public static final String UPLOAD = "upload";
public static final String READ = "read";
public static final String WRITE = "write";
public static final String GRANT = "grant";
public static final String REVOKE = "revoke";
public static final String USERDOCS = "userdocs";
public static final String TOPLEAKED = "topleaked";
public static final String TOPGRANTERS = "topgranters";
public static final String HELP = "help";
public static final String EXIT = "exit";
// Constantes que definem as mensagens para o utilizador
public static final String EXIT_COMM = "Bye!";
public static final String REGISTER_COMM = " was registered.";
public static final String ALREADY_REG_ERROR = " is already assigned to another user.";
public static final String NO_LIST_USERS = "There are no registered users.";
public static final String DOC_UPLOADED = " was uploaded.";
public static final String OFFICIAL_DOC = "Contact upda1ted.";
public static final String TOPSECRET_DOC = "Contact book empty.";
public static final String CONFIDENTIAL_DOC = "Phone number does not exist.";
public static final String CONTACT_SHARE_PHONE = "There are contacts that share phone numbers.";
public static final String HELP_COMM = "register - registers a new user /n";
public static void main(String[] args) {
System.out.println("Welcome!");
// WeKeepSecrets app = new WeKeepSecretsClass();
Scanner in = new Scanner(System.in);
String comm;
do {
System.out.print("Enter command: ");
comm = getCommand(in);
switch (comm) {
case HELP:
System.out.println(HELP);
break;
default:
if (!comm.equals(EXIT)) {
System.out.println("ERRO");
}
}
} while (!comm.equals(EXIT));
System.out.println(EXIT_COMM);
}
private static String getCommand(Scanner in) {
String input;
input = in.nextLine();
return input;
}
}
样本运行:
Welcome!
Enter command: help
help
Enter command: abc
ERRO
Enter command: exit
Bye!
如有任何问题,请随时发表评论doubt/issue。
各位晚上好, 我正在为 uni 做一个项目,我发现自己有点小题大做。 我的命令解释器有问题。 我可以获得 运行 的代码,但不幸的是它没有正确读取我的输入。 有人能指出我接近错误的正确方向吗? 代码如下,忽略评论和其他支持类的实例。 任何帮助,将不胜感激。 提前致谢!
import java.util.Scanner;
public class Main {
//Constantes que definem os comandos
public static final String REGISTER = "register";
public static final String LISTUSERS = "listusers";
public static final String UPLOAD = "upload";
public static final String READ = "read";
public static final String WRITE = "write";
public static final String GRANT = "grant";
public static final String REVOKE = "revoke";
public static final String USERDOCS = "userdocs";
public static final String TOPLEAKED = "topleaked";
public static final String TOPGRANTERS = "topgranters";
public static final String HELP = "help";
public static final String EXIT = "exit";
//Constantes que definem as mensagens para o utilizador
public static final String EXIT_COMM = "Bye!";
public static final String REGISTER_COMM = " was registered.";
public static final String ALREADY_REG_ERROR = " is already assigned to another user.";
public static final String NO_LIST_USERS = "There are no registered users.";
public static final String DOC_UPLOADED = " was uploaded.";
public static final String OFFICIAL_DOC = "Contact upda1ted.";
public static final String TOPSECRET_DOC = "Contact book empty.";
public static final String CONFIDENTIAL_DOC = "Phone number does not exist.";
public static final String CONTACT_SHARE_PHONE = "There are contacts that share phone numbers.";
public static final String HELP_COMM = "register - registers a new user /n";
public static void main(String[] args) {
System.out.println("Welcome!");
//WeKeepSecrets app = new WeKeepSecretsClass();
Scanner in = new Scanner(System.in);
String comm = getCommand(in);
while (!comm.equals(EXIT)){
switch (comm) {
case HELP:
System.out.println(HELP);
default:
System.out.println("ERRO");
break;
}
comm = getCommand(in);
}
System.out.println(EXIT_COMM);
in.close();
}
private static String getCommand(Scanner in) {
String input;
input = in.nextLine().toUpperCase();
return input;
}
}
您的命令都是小写的,但您正在将用户输入转换为大写。转为小写。
input = in.nextLine().toLowerCase();
您可能还想将 break
添加到 HELP 命令中:
case HELP:
System.out.println(HELP);
break;
-
在
break
。请注意,最后一个case
中不需要break
,即default
。- case 中的值应该匹配字符串常量的值,因此,从返回的字符串中删除
toUpperCase()
。 - 此外,使用
do...while
避免使用comm = getCommand(in);
两次。
HELP
的 case
中缺少 下面是更正后的代码:
import java.util.Scanner;
public class Main {
// Constantes que definem os comandos
public static final String REGISTER = "register";
public static final String LISTUSERS = "listusers";
public static final String UPLOAD = "upload";
public static final String READ = "read";
public static final String WRITE = "write";
public static final String GRANT = "grant";
public static final String REVOKE = "revoke";
public static final String USERDOCS = "userdocs";
public static final String TOPLEAKED = "topleaked";
public static final String TOPGRANTERS = "topgranters";
public static final String HELP = "help";
public static final String EXIT = "exit";
// Constantes que definem as mensagens para o utilizador
public static final String EXIT_COMM = "Bye!";
public static final String REGISTER_COMM = " was registered.";
public static final String ALREADY_REG_ERROR = " is already assigned to another user.";
public static final String NO_LIST_USERS = "There are no registered users.";
public static final String DOC_UPLOADED = " was uploaded.";
public static final String OFFICIAL_DOC = "Contact upda1ted.";
public static final String TOPSECRET_DOC = "Contact book empty.";
public static final String CONFIDENTIAL_DOC = "Phone number does not exist.";
public static final String CONTACT_SHARE_PHONE = "There are contacts that share phone numbers.";
public static final String HELP_COMM = "register - registers a new user /n";
public static void main(String[] args) {
System.out.println("Welcome!");
// WeKeepSecrets app = new WeKeepSecretsClass();
Scanner in = new Scanner(System.in);
String comm;
do {
System.out.print("Enter command: ");
comm = getCommand(in);
switch (comm) {
case HELP:
System.out.println(HELP);
break;
default:
if (!comm.equals(EXIT)) {
System.out.println("ERRO");
}
}
} while (!comm.equals(EXIT));
System.out.println(EXIT_COMM);
}
private static String getCommand(Scanner in) {
String input;
input = in.nextLine();
return input;
}
}
样本运行:
Welcome!
Enter command: help
help
Enter command: abc
ERRO
Enter command: exit
Bye!
如有任何问题,请随时发表评论doubt/issue。