2016-09-11 1 views
1

私はプログラミングを学び、自分のスキルを上達させるためにオンラインコーディングプロジェクトを行っています。現在のプロジェクトの目的は、ベース2の番号が最初に他の番号と一致するバイナリを把握することです。私はおそらくそれを正しく説明していないでしょう。バイナリからストリング - 多数のエラー.StringIndexOutOfBounds

たとえば、10010と10011というバイナリ文字列を使用した場合、回答は2になりますが、11111と10000があれば答えは16になります。以下のコードは最初の4つのテストで動作しますが、私のメソッドに渡されている最後のテストのサンプルデータは、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を反復処理するときに、インデックスから境界外の例外が発生します。文字列の長さ

+0

良いキャッチ - ありがとう - しかし、同じ問題が...私はそれを逃したと信じることができない...私は投げられているエラーを追加しています –

+0

実際に、私はあなたが行っていた場所を参照してください... if文を使って現在の長さを比較し、短い文字列を余分な0で前の文字列に追加します。今すぐ完璧に動作します。 –

関連する問題