从二进制字符串转换时的NumberFormatException

时间:2016-09-08 16:09:30

标签: java arrays string numberformatexception

public class ACM_ICPC_TEAM {
 public static void main(String[] args) {

        Scanner sc=new Scanner(System.in);
        int N=sc.nextInt();
        int M=sc.nextInt();
        sc.nextLine();

        String s[]=new String[N];
        for(int i=0;i<N;i++)
        { 
        for(int j=0;j<M;j++);
        {               
            s[i]=sc.nextLine().toString();              
        }         
        }
      BitSet b1=new BitSet(M);
      BitSet b2=new BitSet(M);
      BitSet b3=new BitSet(M);
      int max=0,count=0,count1=0;
        for(int i=0;i<N;i++)
        {  b1=fromString(s[i]);
         for(int j=i+1;j<N;j++)
         {  
            b3=(BitSet) b1.clone();
            b2=fromString(s[j]);
            b3.or(b2);       
            count=b3.cardinality();    
            if(count>max)
                {
                max=count;
                count1=1;
                }
            else if(count==max)
                 count1++;
         }
        }

        System.out.println(count+"\n"+count1);          
    }

 public static BitSet fromString(String s)
 {  
    return BitSet.valueOf(new long[] { Long.parseLong(s,2) });
 }
 public static String toString(BitSet b)
 {
 return Long.toString(b.toLongArray()[0], 2);   
 }
}

当我传递大小的二进制字符串(~500)时,我的fromString正在给我NumberFormatException,它对于较小长度的字符串工作得非常好。

2 个答案:

答案 0 :(得分:1)

Java long值是64位数,即最多可以存储64位。具有500位的字符串根本不能用单个long表示,因此是例外。

BitSet可以表示任意长度的位组。不幸的是,BitSet没有将一个BitSet附加到另一个BitSet的方法。因此,我要做的是通过char查询String char,并根据需要设置或清除BitSet的第n位。

答案 1 :(得分:0)

没有办法用500位创建int。最大值为64.在Java中,您可以使用BigInteger,这是一个用于大数字的类。

它有一个构造函数,它接受String和构造函数,该构造函数取String个值和int基数。

BigInteger a = new BigInteger("1234567890123456");
BigInteger b = new BigInteger("10000000000000000", 2);