2012-02-20 4 views
4

기본적으로 저는 현재 AP Comp Sci 클래스에서 제가하고있는 GridWorld Project를 가지고 있습니다. 나는 Pacman을하고있다. 여기에 행동 방법에 대한 내 코드 (GridWorld에 익숙하지 않은 사람들을 위해이 행위의 방법은 배우가 새로운 이동을 할 것으로 기대 될 때마다 호출됩니다) :IllegalArgumentException을 던지고 잡는 방법은 무엇입니까?

public void act() 
{ 
    Location loc = getLocation(); 

    if(direction==null) { 
    } 

    else if(direction.equals("NORTH")) { 
     Location next = loc.getAdjacentLocation(loc.NORTH); 
     if(getGrid().isValid(next) && (getGrid().get(next)==null || getGrid().get(next) instanceof Food)) { 
      if(getGrid().get(next) instanceof Food) 
       addFood(); 
      moveTo(next); 
      direction = "NORTH"; 
     } 
    } 

    else if(direction.equals("SOUTH")) { 
     Location next = loc.getAdjacentLocation(loc.SOUTH); 
     if(getGrid().isValid(next) && (getGrid().get(next)==null || getGrid().get(next) instanceof Food)) { 
      if(getGrid().get(next) instanceof Food) 
       addFood(); 
      moveTo(getLocation().getAdjacentLocation(getLocation().SOUTH)); 
      direction = "SOUTH"; 
     } 
    } 

    else if(direction.equals("EAST")) { 
     Location next = loc.getAdjacentLocation(loc.EAST); 
     if(getGrid().isValid(next) && (getGrid().get(next)==null || getGrid().get(next) instanceof Food)) { 
      if(getGrid().get(next) instanceof Food) 
       addFood(); 
      moveTo(getLocation().getAdjacentLocation(getLocation().EAST)); 
      direction = "EAST"; 
     } 

     else if(getLocation().getCol()==20 && getLocation().getRow()==9) { 
      moveTo(new Location(9,0)); 
      direction = "EAST"; 
     } 
    } 

    else if(direction.equals("WEST")) { 
     Location next = loc.getAdjacentLocation(loc.WEST); 
     if(getGrid().isValid(next) && (getGrid().get(next)==null || getGrid().get(next) instanceof Food)) { 
      moveTo(getLocation().getAdjacentLocation(getLocation().WEST)); 
      direction = "WEST"; 
     } 

     else if(getLocation().getCol()==0 && getLocation().getRow()==9) { 
      moveTo(new Location(9,20)); 
      direction = "WEST"; 
     } 
    } 
} 

마지막 두의 이상한 표현하는 이유 진술이 BC 인 경우 나는 Pacman이 실제 게임에서 텔레포트 할 수 있기를 바랍니다. 이제 게임을 실행하면 약 90 %가 작동하지만 다른 10 %에서는 IllegalArgumentException이 발생합니다. 보드에없는 장소 (예 : (9, -1)) 및 (9,21)). 나는 이것을 어떻게 멈추기 위해 내가 어떻게 잡을 지 또는 던지거나 내가해야 할 일이 무엇인지 알고 싶다. 나는 잡동사니를 사용한 적이 없기 때문에 추론을 설명해주십시오!

답변

5

예외를 throw하려면 키워드 throw을 사용하십시오. catch하려면 try/catch 구조를 사용합니다. 자세한 내용은이 참조 : - :

try { 
    throw new IllegalArgumentException("Threw an IllegalArgumentException"); 
} catch(IllegalArgumentException e) { 
    System.out.println("Caught an IllegalArgumentException..." + e.getMessage()); 
} 

당신은, 그러나, 보일 것입니다 귀하의 사례를 들어

, 당신은 같은 것을 할 것이 테스트 케이스입니다 코드에 IllegalArgumentException이 던져진 이유를 확인하고 그 부분을 수정하십시오. 예외를 사용하고 try/catch를 사용하면 예기치 않은 이벤트가 발생하지만 발생 가능한 이벤트가 아니라 더 나은 방법으로 처리 할 수 ​​있습니다.

예를 들어 파일을 찾을 수 없을 때 FileNotFoundException이 throw됩니다. 당신은 일반적으로 파일을 찾지 못하면 뭔가를 할 수 있도록 시도하거나 잡습니다. 그러나 합리적인 경우에 파일이 존재하지 않을 것으로 예상되는 경우 먼저 파일이 존재하는지 확인한 다음 실제로 파일이 존재하는지 확인하는 것이 좋습니다.

+1

고마워요!그래서 나는 당신의 충고를 받아 들였고 잠시가 지났지 만 마침내 내가 잘못 가고있는 곳에서 발견되어 결국 고쳐 버렸습니다. –

+0

멋진 솔루션으로 끝나고 다행히 해결했습니다! –

0

정상적인 예외를 catch하는 것과 같은 방법으로 IllegalArgumentException을 catch 할 수 있습니다. 일반적으로 IAE는 프로그램을 무효화하는 상태에서 유래하므로 음수 인덱스를 받으면이를 해당 유효 값으로 변환해야합니다. 프로그램이 어떻게 기능 할 것 인가에 관해서는, 일반적으로 음의 색인 참조는 좋지 않습니다.

0

게임을 계속 실행하기 위해 예외를 잡을 수 있고 매개 변수가 잘못되어 만족 스럽습니다. 그래서 효과적으로 프로그램의 논리에 예외를 사용하여 목적을 무력화시킵니다.

IllegalArgumentException은 런타임 예외이므로 catch하지 않아야하며 프로그램이 어떤 방식 으로든 실패해야합니다. 전달 된 매개 변수가 올바른지 확인하기 만하면됩니다.

0

Google에있는 많은 자습서 중 하나를 사용하여 예외를 쉽게 포착하고 예외를 throw하는 방법을 배울 수 있습니다.

그러나 IllegalArgumentException은 타사 API로 보내는 일부 매개 변수가 잘못되었음을 의미합니다. 애플리케이션을 디버그하고 어떤 코드가 문제를 일으키는 지 확인하고, API 문서를 검토하여 중단하려는 매개 변수의 요구 사항/제약 조건을 확인하고 수정하십시오.

물론 catch (IllegalArgunentException e) 만 추가하고 아무 것도 수행 할 수 없습니다. 프로그램이 실행될 수도 있지만 나중에 충돌 할 수 있습니다.

관련 문제