非常感谢你在adv的帮助!
使用枚举类型的扫描仪时出错。但是我不允许在此任务中使用Buffer(InputStreamReader)。围绕它的最佳工作是什么?
我收到以下错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted
at ui.Application.runCLI(Application.java:33)
at ui.Application.main(Application.java:13)
代码:
package ui;
import java.util.Scanner;
公共类申请{
static String command;
public enum Command {
CONNECT, DISCONNECT, SEND, LOGLEVEL, HELP, QUIT, EXIT
}
private static void run(Scanner sc) {
// String command; // ready for the input
boolean done = false; // ready for the menu loop
while (!done) { // keep on until done
System.out
.println("Milestone1: Connection and interation with TCP server");
System.out
.println("-------------------Please select on of the commandso-------------------------------------");
System.out.println("connect");
System.out.println("disconnect");
System.out.println("send");
System.out.println("logLevel");
System.out.println("help");
System.out.println("quit");
System.out.println("exit");
command = sc.nextLine(); // take user input
Command cmd=null;
try{
cmd=Command.valueOf(command.toUpperCase());
}
catch (IllegalArgumentException e){
System.out.println("Invalid input");
return;
}
switch (cmd) {
case EXIT: // exit menu
done = true;// condition for breaking the loop
break;
case CONNECT:
System.out.print(" IP adress: ");
try {
String userInput = sc.toString(); // user Input
System.out.println(" Port: ");
int userInput1 = sc.nextInt();// user Input
if (userInput1 >= 0) {
System.out.println(" EcoClient>" + " " + command + " "
+ userInput + " " + userInput1);
} else {
System.out
.println("Entered value for Port is negative number or IP adress length < 7 || > 15, not in n.n.n.n format ");
}
}
catch (Exception e) {// throw exception in case of illogical
// input
System.out.println("\nBad input, please try again ");
sc.nextLine(); // remove leftover "\n"
}
break;
case DISCONNECT:
System.out.println(" EcoClient>" + " " + command);
break;
case SEND:
System.out
.println("Please enter " + " Hello World " + "phrase");
try {
String userInput = sc.toString(); // user Input
System.out.println(" EcoClient>" + " " + command + " "
+ userInput);
}
catch (Exception e) {// throw exception in case of illogical
// input
System.out.println("\nBad input, please try again ");
sc.nextLine(); // remove leftover "\n"
}
break;
case LOGLEVEL:
try {
System.out.println(" EcoClient>" + " " + command + "< "
+ "current log status" + " >");
}
catch (Exception e) {// throw exception in case of illogical
// input
System.out.println("\nBad input, please try again ");
sc.nextLine(); // remove leftover "\n"
}
break;
case HELP:
try {
System.out
.println("Following set of commands provide following functionalities:"
+ " connect: establishes connection to the eco server "
+ "disconnect: disconnects from the server and receives confirmation message "
+ "send: sends the message to the server "
+ "logLevel: prints out current log status"
+ "quit: quits and notifies user about program shut down "
+ "exit: cancel the input");
}
catch (Exception e) {// throw exception in case of illogical
// input
System.out.println("\nBad input, please try again ");
sc.nextLine(); // remove leftover "\n"
}
break;
case QUIT:
try {
System.out.println(" EcoClient> " + command);
}
catch (Exception e) {// throw exception in case of illogical
// input
System.out.println("\nBad input, please try again ");
sc.nextLine(); // remove leftover "\n"
}
break;
default:
System.out.println("Does not recognise "
+ "the input, pl. try again");
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);// will take user input
run(sc);
}
}
答案 0 :(得分:2)
sc.nextLine()
返回一个String。您将需要使用静态方法Command
将其转换为switch
的实例(您正在使用Command.valueOf(String)
),该方法解析字符串并返回匹配的Command
实例
以下是基础知识:
command = sc.nextLine(); // take user input
Command cmd = null;
try {
cmd = Command.valueOf(command.toUpperCase());
} catch (IllegalArgumentException e) {
System.out.println("Invalid input, sorry."); //This is given on invalid input. Put whatever type of error message you want here.
return;
}
switch (cmd) {
//...