2016-09-11 51 views
1

我正在做一些在線編碼項目,試圖學習編程和提高我的技能。當前項目的目標是找出二進制數字,其中第一個數字與第二個數字匹配。我可能沒有正確解釋。二進制字符串 - 大數字錯誤.StringIndexOutOfBounds

例如,如果我有我的二進制字符串爲10010和10011答案將是2但如果我有11111和10000,答案將是16.我的代碼下面的作品爲它運行的前4個測試,但在第五個測試,它會拋出一個.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

你的問題是在這裏

int mLen = theN.length(); 應該使用theM

如果theM字符串的長度小於theN迭代p時,您將獲得索引越界異常作爲M字符串的長度

+0

良好的捕捉 - 謝謝 - 但得到了同樣的問題....我不能相信我錯過了,雖然...我添加了正在拋出的錯誤 –

+0

其實,我看到你要去哪裏...我有做一個if語句來比較當前的長度,然後將更短的字符串追加到0的前面。現在完美地工作。 –