2014-05-16 2 views
-2

저는 Java 프로그래밍을 연습 해왔고 최근에는 다른 라이브러리를 사용하는 일부 State 기반 스크립팅에서 손을 잡으려한다고 생각했습니다. 나는 두 번째 경우에 도달 할 수없는 switch 문으로 걸림돌을 때렸다. 이제는 외부 API에 익숙하지 않을 수도 있지만 일반적으로 내 논리에 문제가 있는지 궁금해했습니다. ,이 Java Switch 문을 진행할 수없는 이유는 무엇입니까?

switch (getState()) { 
     case CUT: 
      if (!myPlayer().isAnimating() && equipmentTab.isWieldingWeapon(Axe)) { 
       log("You have an Axe."); 
      } else { 
       log("You don't have an axe"); 
       State.WALK_TO_BANK.equals(true); 
       RS2Object bank = closestObjectForName("Bank Booth"); 
       if (bank != null) { 
        if (bank.interact("Bank")) { 
         while (!client.getBank().isOpen()) 
          sleep(250); 
         client.getBank().withdraw1(Axe); 
         equipmentTab.equipForNameThatContains(EquipmentSlot.WEAPON, "axe"); 
         State.CUT.equals(true); 
        } 
        RS2Object tree = closestObject(TREE_ID); 
        if (!myPlayer().isInArea(CHOP_AREA) && client.getInventory().isEmpty()) { 
         State.WALK_TO_TREE.equals(true); 
        } 
        if (tree != null) { 
         if (tree.interact("Chop down")) 
          sleep(random(1000, 1500)); 
         log("Trying to cut tree"); 
        } 
        break; 

        case WALK_TO_BANK:  // IDE states- Unable to resolve symbol 
         status = "Walk to Bank"; 
         traversePath(path, true); 
         sleep(random(1500, 2500)); 
         break; 
        case WALK_TO_TREE: 
         status = "Walk to Tree"; 
         if (!myPlayer().isInArea(CHOP_AREA) || client.getInventory().isEmpty() && equipmentTab.isWieldingWeapon(Axe)) { 
          log("You have an Axe."); 
          State.WALK_TO_TREE.equals(true); 
         } 
         traversePath(path, false); 
         sleep(random(1500, 2500)); 
         break; 

        case BANK: 
         status = "Banking"; 
         RS2Object bank = closestObjectForName("Bank booth"); 
         if (bank != null) { 
          if (bank.interact("Bank")) { 
           while (!client.getBank().isOpen()) 
            sleep(250); 
           client.getBank().depositAll(); 
          } 
         } 
         break; 
       } 
       return random(200, 300); 
      } 

절단 된 경우 이동합니다 WALK_TO_BANK 케이스에에 완료하고 후 : 상태는 열거에서 와서 나는 다른 전제 조건에 대해 테스트하는의 getState() 메소드가 있습니다

private enum State { 

    CUT, WALK_TO_BANK, BANK, WALK_TO_TREE 

} 

private State getState() { 
    if (client.getInventory().isFull() && !BANK_AREA.contains(myPlayer())) 
     return State.WALK_TO_BANK; 
    if (!client.getInventory().isFull() && !CHOP_AREA.contains(myPlayer())) 
     return State.WALK_TO_TREE; 
    if (!client.getInventory().isEmpty() && BANK_AREA.contains(myPlayer())) 
     return State.BANK; 
    return State.CUT; 
} 

스위치 문을 IntelliJ는 기호를 확인할 수 없음을 나타냅니다. 나는 확실히 확신 할 수 없다. 나는 이것에 대해 아주 익숙하기 때문에 내 코드가 효율적 일 수는 없지만 스크립팅에서이 연습을하면 분명히 향상 될 것이다.

+3

당신은 중괄호를 놓친'}'은'break' 전에 가야한다 CUT'의 경우'에서'else' 문을 닫습니다. –

+0

이것은 실제로 코드를 실행 가능하게 만들었습니다. 나는 그 중 2 개를 놓쳤습니다 : /. 도와 주셔서 감사합니다. – user3646185

+0

반갑습니다. –

답변

1

구문이 꺼져 있습니다. case 문은 모두 else 블록 외부의 동일한 범위에 있어야합니다.

0

이 시도 :

class Test 
{ 
    private enum State { 

     CUT, WALK_TO_BANK, BANK, WALK_TO_TREE 

    } 

    int step = 0; 

    private State getState() 
    { 

     if (step == 1) 
      return State.WALK_TO_BANK; 
     if (step == 2) 
      return State.WALK_TO_TREE; 
     if (step == 3) 
      return State.BANK; 
     return State.CUT; 

    } 

    Test() 
    { 
     switch (getState()) 
     { 
      case CUT: 
       if (true) 
       { 
       } 
       else 
       { 
       } 
       break; 

      case WALK_TO_BANK: // IDE states- Unable to resolve symbol 
       break; 
      case WALK_TO_TREE: 
       break; 

      case BANK: 
       break; 
     } 
    } 

} 
관련 문제