2014-10-20 53 views
1

非常感谢您的帮助!如何在扫描器上使用enum类型

使用带枚举类型的扫描器时出现错误。但是我没有被允许在这个任务中使用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; 

进口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

不要忘了把这个词'static'在main'的'的声明 - 而且,无论是调用'run'之前实例化类或声明'run'也是静态的。 – 2014-10-20 02:18:22

+0

但是,谢谢你添加静态并不能解决问题 – 2014-10-20 20:46:04

+0

stacktrace提到'runCLI'而不是上面的'run'? – 2014-10-20 21:02:24

回答

2

sc.nextLine()返回一个字符串。您需要使用静态方法Command.valueOf(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) { 
//... 
+0

谢谢Jim Garrison,但是同样的错误仍然存​​在 – 2014-10-20 20:45:04

+0

线程“main”中的异常java.lang.Error:未解决的编译问题: \t无法为源级别低于1.7的字符串开启String类型的值。只有转换int类型或枚举变量允许 (Application.java:33) \t在ui.Application.main(Application.java:13)\t在ui.Application.runCLI – 2014-10-20 20:45:20

+0

@NadiaS你改变'开关(命令)'切换(cmd)'? – Pokechu22 2014-10-20 20:53:55