2016-11-09 3 views
-1

数字の0と1からなるテキストファイルから複数の行を読み込み、その行を2次元配列に格納したいとします。 2 * 2、4 * 4、および8 * 8の配列を読み込むと、コードが正常に動作します。しかし、16 * 16以上のときは、このエラーメッセージ(java.util.InputMismatchException:入力文字列: "0010101111011011")が表示されます。これは私のコードです。なぜ私のコードは8行の整数を読み込みますが、16を読み込むとInputMissMatchエラーが出るのですか?

public static void storingIntegers(Scanner input, int [][]array){ 


      for (int i = 0; i < array.length; i++) { 
       //This variable reads the line which contains the numbers 
      int row= input.nextInt(); 
       for (int j = array[i].length-1; j>=0; j--) { 
      //this line will take the last number in the line and store it in the array from index 0 
      //start storing from the last index 
      array[i][j] = row%10; 
      row=row/10; 

      } 
     } 

    } 

私はこのメッセージが与えられた理由とこの問題を解決する方法を知りたいですか?ここ

はファイル

0010101111011011 
1101101111011011 
0010110011110011 
1110110011110011 
1101101011011010 
0010101011110011 
1111001111011010 
0011111111110011 
0010101111011011 
1101101111011011 
0010110011110011 
1110110011110011 
1101101011011010 
0010101011110011 
1111001111011010 
0011111111110011 

から読み取らなければならない数字の16 * 16の配列のサンプル入力でいただきありがとうございます、

答えて

0

documentationによると、nextInt()InputMismatchExceptionがスローされます...

次のトークンがInteger正規表現に一致する、または範囲

の外にあるしない場合は1

Java整数の範囲は(-2^31)から(2^31-1)= 2147483647までです。値を2進整数としてフォーマットしていないため、値が範囲外になっている可能性があります。 Javaの整数のMAX_VALUEは10進数が10で、16桁の整数の書式設定中にExceptionを取得していることに注意してください。

たぶん、あなたはradixを指定して試みることができる:

int row = input.nextInt(2); //this way you read integers in base 2 

それとも、それが来ると同じ形式で番号を保存したい場合、あなたはBigIntegerのを検索してみてください:

BigInteger row = input.nextBigInteger(); 
+0

私はあなたを試してみました方法。はい、エラーメッセージを修正しますが、問題は解決しません。実際に私は別の方法でそれを解決しました。私は(x)変数に(long)を格納してから%10をとり、別の(int)変数(y)に格納してからint配列に格納します。 –

+0

私は参照してください。さて、まだ有効な答え、特にBigIntegerの部分です。大きな数字を入力すると、同じ問題に遭遇します。また、実装の精度が失われている可能性がありますか?私はあなたが収集した番号のいくつかの重要なビットを投げ捨てていると思います。 – Azurlake

関連する問題