2014-11-01 2 views
2

, когда я пытаюсь запустить этот код (да, я знаю, что она будет работать ужасно долго и не очень красиво):NumberFormatException для Long.parseLong

DecimalFormat formatA = new DecimalFormat("000"); 
     DecimalFormat formatB = new DecimalFormat("0000000000000000000000000000000000000000"); 

     for(int c=0; c<=7; c++){ 
      String binC = formatA.format(Integer.parseInt(Integer.toBinaryString(c))); 
      for(int d=0; d<LFSRa.length; d++){ 
       LFSRa[d]=Character.getNumericValue((binC.charAt(d)));     
      } 
      for(long e=0; e<=1099511627775L; e++){ 
       String binE = formatB.format(Long.parseLong((Long.toBinaryString(e)))); 
       for(int f=0; f<LFSRb.length; f++){ 
        LFSRb[f]=Character.getNumericValue((binE.charAt(f))); 
       } 


      } 
     } 

Я получаю следующее исключение

Exception in thread "main" java.lang.NumberFormatException: For input string: "10000000000000000000" 
at java.lang.NumberFormatException.forInputString(Unknown Source) 
at java.lang.Long.parseLong(Unknown Source) 
at java.lang.Long.parseLong(Unknown Source) 
at A41.main(A41.java:76) 

, и я не понимаю почему. Что мне делать? Может ли кто-нибудь объяснить мне эту проблему?

+3

Как только ваше двоичное число будет содержать 20 цифр, повторное интерпретирование его в десятичном значении будет превышать максимальное значение 'Long'. –

ответ

0

если вы видите это:

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

Диапазон длинного т.е. макс является 9223372036854775807, 19 цифр, и как только он достигает 10000000000000000000 (20 цифр), он будет пытаться преобразовать эту строку длиной, которая является вне диапазона и, следовательно, вы получаете исключение.

Смежные вопросы