2016-09-11 1 views
1

프로그래밍을 배우려고 노력하는 온라인 코딩 프로젝트를 수행하고 기술을 향상 시켰습니다. 현재 프로젝트의 목적은 기본 2 숫자가 다른 숫자와 먼저 일치하는 2 진수를 알아내는 것입니다. 아마 그걸 제대로 설명하지 못했을거야.바이너리에서 문자열 - 많은 수의 오류 .StringIndexOutOfBounds

예를 들어 이진 문자열이 10010과 10011 인 경우 대답은 2가되지만 11111과 10000이 있으면 대답은 16이됩니다. 아래 코드는 실행되는 처음 네 번의 테스트에서 작동하지만 다섯 번째 테스트는 .StringIndexOutOfBounds를 던졌습니다. 내 테스트에 전달되는 마지막 테스트의 샘플 데이터는 n = 1073741824 &m = 1006895103입니다. charAt()의 크기 또는 제한과 관련하여 문제가있을 수 있지만 확실하지는 않다고 가정합니다. ... 어떤 제안이라도 대단히 감사하겠습니다. 코드 아래 :

int equalPairOfBits(int n, int m) { 
     String theN = Integer.toBinaryString(n); 
     String theM = Integer.toBinaryString(m); 
     int pos = 0; 
     int nLen = theN.length(); 
     int mLen = theN.length(); 
     char[] nArray = new char[nLen]; 
     char[] mArray = new char[mLen]; 

     for(int i = nLen - 1; i > -1; i--){ 
      nArray[i] = theN.charAt(i); 
     } 
     for(int i = mLen - 1; i > -1; i--){ 
      mArray[i] = theM.charAt(i); 
     } 
     boolean isSame = false; 
     for(int i = nLen - 1; i > -1; i--){ 
       if(nArray[i] == mArray[i] && isSame == false) 
       { 
        pos = i; 
        isSame = true; 
       } 

     } 
     pos = nLen - pos; 
     int mult = 1; 
     for(int i = 1; i < pos; i++){ 
      if(pos == 0) 
       mult = 1; 
      else 
       mult = mult * 2; 
     } 
     return mult; 
    } 

오류 나는 점점 오전 :

Exception in thread "main" java.lang.AssertionError: java.lang.reflect.InvocationTargetException 
    at myCode._invoke(file.java on line ?) 
    at myCode.main(file.java on line ?) 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at myCode._invoke(file.java on line ?) 
    ... 1 more 
Caused by: java.lang.ArrayIndexOutOfBoundsException: 30 
    at _runppnqw.equalPairOfBits(file.java on line 18) 
+0

디버거에서 알려주는 것은 무엇입니까? 처음 2 개 루프 전후에 오류가 발생합니까? – usr2564301

답변

1

문제는 여기 theM 문자열의 길이보다 작은 theN 경우

int mLen = theN.length(); theM

를 사용한다 p를 반복 할 때 인덱스를 벗어난 예외가 발생합니다. ast M 문자열 길이

+0

좋은 캐치 - 고마워 -하지만 같은 문제가있어 .... 내가 그걸 놓친 걸 믿을 수 없어 ... 내가 던져지고있는 오류를 추가하고있다 –

+0

사실, 내가 어디로 가는지 볼 수있다. if 문을 사용하여 현재 길이를 비교 한 다음 짧은 문자열을 추가 0으로 앞에 추가합니다. 이제 완벽하게 작동합니다. –