2014-01-14 5 views
0

저는 체스 판을 만듭니다. 여기서 혼자만의 왕이 체스의 규칙에 따라 걸을 것입니다. 아래의 방법으로 King의 좌표 i와 j의 2 배를 호출했습니다.이 King의 좌표가 이미 존재하는지 확인하기 위해 입력 변수 String을 작성했습니다. 정수로 변환하려고 시도하는 것보다이 변환에 문제가있는 것 같습니다.문자열에서 정수로의 변환에 문제가 있습니다

import java.util.*; 
public class King { 
    int move(String iK){ 
     Random rand = new Random(); 
     Integer coordinateKing = Integer.valueOf(iK); 
     if (iK == null){   
      coordinateKing = rand.nextInt(8); 
     }else{ 
      int caseI; 
      switch(caseI = rand.nextInt(2)){ 
       case 0: if (coordinateKing < 8){ coordinateKing++; } else {caseI = rand.nextInt(2);} 
       break; 
       case 1: if (coordinateKing > 0){ coordinateKing--; } else {caseI = rand.nextInt(2);} 
       break; 
       default: 
       break; 
      }   
     }  
     return coordinateKing; 
    } 
} 

나는이 같은 문제를 가지고 :

Exception in thread "main" java.lang.NumberFormatException: null 
    at java.lang.Integer.parseInt(Integer.java:454) 
    at java.lang.Integer.valueOf(Integer.java:582) 
    at chess_engine.King.move(King.java:6) 
    at chess_engine.MainClass.main(MainClass.java:12) 

사전에 감사!

+1

'iK'값을 제공 할 수 있습니까? –

+1

'iK'는'null'이므로 파싱 할 수 없습니다. 그냥 'coordinateKing'을 선언하고 else 블록에 'coordinateKing = Integer.valueOf (iK);를 옮기시겠습니까? –

답변

2

null인지 확인하기 전에 iK을 정수로 변환하려고합니다.

Integer coordinateKing = Integer.valueOf(iK); 

하지만 당신은 그 다음 줄에 if (iK == null)을 확인 :이 줄은 예외가 발생되는 경우입니다. 먼저 null 테스트를 수행해야합니다. if 문 앞에 coordinateKing을 선언하고 if...else 블록에 값을 설정하여이 문제를 해결할 수 있습니다. 여기 IK null 값 및 정수 객체가 널 저장할 수 있지만, 상기 방법 valueOf() 내부적 int 값을 반환하고 널이 int로 변환 될 수 parseInt() 방법을 사용하여 수용되어

Integer coordinateKing = 0; 

if (iK == null){   
    coordinateKing = rand.nextInt(8); 
} else { 
    coordinateKing = Integer.valueOf(iK); 
    int caseI; 
    ... 
} 
+0

감사! 이제 작동 중입니다) –

1

예외는 아주 자명합니다. iK는 null 문자열이며 Integer로 변환 할 수 없습니다. iK가 null 일 때 원하는 정수는 무엇입니까?

2

당신이 NULL이 될 수있는이

Integer coordinateKing = Integer.valueOf(iK); 

하지만 iK를 호출합니다. 먼저 null을 확인하십시오.

1

그것은 런타임 에러입니다

관련 문제