2014-09-26 65 views
0

我想切换状态。我首先在START_STATE开始。然后我提示用户是否进入FAIL_STATE或GO_STATE。然而,看起来他们是否输入了“去”(对于GO_STATE)失败(对于FAIL_STATE),其他情况都没有激活。什么是这个问题的解决方案?枚举不为换开关语句

import java.util.*; 

public class dfa { 
     static State state; 


public enum State 
    { 
     START_STATE, 
     GO_STATE, 
     FAIL_STATE, 
     }; 


dfa(State state) 
{ state = this.state;} 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    String line; 

    state = State.START_STATE; 
     switch(state) 
      { 
      case START_STATE: 

       System.out.print("In start state \n "); 
       System.out.println("Which state you want to go to? \n"); 
       line = input.next(); 
       if(line.equals("go")) 
       { 
        state = State.GO_STATE; 
        System.out.print(" Go hello"); 
       } 
       else if(line.equals("fail")) 
       { 
        state = State.FAIL_STATE; 
       System.out.println(" Fail hello "); 
       } 
       break; 
       case FAIL_STATE: 
       System.out.println("fail state"); 
       break; 
       case GO_STATE: 
       System.out.println("go state"); 
       break; 

      default: 
       System.out.println("Default"); 
       break; 
      } 


    System.out.println("made it here"); 





    } 

} 

输出:

 
(When "go" is typed) 
Go hello 
made it here 

(When "fail" is typed) 
Fail hello 
made it here 

回答

1

case START_STATE没有break。然后它将永远去下一个女巫是case FAIL_STATE:女巫有一个break

您的switch-case应遵循此顺序。

switch(condition){ 
    case con1: 
    // do something 
    break; 
    case con2: 
    // do something 
    break; 
    default: 
    // do something 
    break;   

} 
+0

添加了中断,但由于某种原因,程序未进入任一状态。 – JudgementFlame 2014-09-26 08:18:09

0

您只需在为START_STATE时忘了break

case START_STATE: 
    System.out.print("In start state \n "); 
    System.out.println("Which state you want to go to? \n"); 
    line = input.next(); 
    if(line.equals("go")) { 
     state = State.GO_STATE; 
     System.out.print(" Go hello"); 
    } else if(line.equals("fail")) { 
     state = State.FAIL_STATE; 
     System.out.println(" Fail hello "); 
    } 
    break; // <-- here 
0

你缺少在case START_STATE结束break语句,所以它只是下降到下一case

case START_STATE: 
    System.out.print("In start state \n "); 
    System.out.println("Which state you want to go to? \n"); 
    line = input.next(); 
    if(line.equals("go")) 
    { 
     state = State.GO_STATE; 
     System.out.print(" Go hello"); 
    } 
    else if(line.equals("fail")) 
    { 
     state = State.FAIL_STATE; 
     System.out.println(" Fail hello "); 
    } 
    break; // Missing from OP