Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有大索引的Java位集错误_Java_Algorithm_Bitset - Fatal编程技术网

具有大索引的Java位集错误

具有大索引的Java位集错误,java,algorithm,bitset,Java,Algorithm,Bitset,这是中解决方案的后续,因为这是我创建的一个新问题的旧线程。 我编写了一个位集实现,假设这些数字介于java最大值和最小值整数之间。这是密码 void bitsetWay() throws FileNotFoundException { String path=System.getProperty("user.dir")+"/src/com/sjcode/"; Scanner in = new Scanner(new FileReader(path+"a.t

这是中解决方案的后续,因为这是我创建的一个新问题的旧线程。 我编写了一个位集实现,假设这些数字介于java最大值和最小值整数之间。这是密码

void bitsetWay() throws FileNotFoundException
    {
        String path=System.getProperty("user.dir")+"/src/com/sjcode/";
        Scanner in = new Scanner(new FileReader(path+"a.txt"));
        BitSet btpos= new BitSet(Integer.MAX_VALUE);
        BitSet btneg= new BitSet(Integer.MAX_VALUE);

        while(in.hasNextInt()){
            int n = in.nextInt();
            System.out.println(n);
            if (n<0)
            {
                btneg.set(-1*n);
            }
            else
            {
                btpos.set(n);
            }
        }
        System.out.println(btpos.nextClearBit(0) + " : " + btpos);
        //ignore btneg[0] since we treat 0 as +ve
        System.out.println(btneg.nextClearBit(1) + " : " + btneg);
    }
-- 输出:

-- 但当我给出一个大于2147483583的数字时,它似乎环绕并设置位0!我错过什么了吗?是打印整数。最大值不打印2147483647

输入: 输出:
我怀疑这是您的Java版本中的一个bug。我有Java7Update21,它有一个类似的问题,但不完全相同

BitSet bs = new BitSet(Integer.MAX_VALUE);
bs.set(Integer.MAX_VALUE-1);
System.err.println(bs);
bs.set(Integer.MAX_VALUE);
System.err.println("Set ok but...");
System.out.println(bs);
印刷品

{2147483646}
Set ok but...
Exception in thread "main" java.lang.IndexOutOfBoundsException: fromIndex < 0: -2147483647
    at java.util.BitSet.nextSetBit(BitSet.java:701)
    at java.util.BitSet.toString(BitSet.java:1181)
    at java.lang.String.valueOf(String.java:2854)
    at java.io.PrintStream.println(PrintStream.java:821)
    at Main.main(Main.java:12)
{2147483646}
设置好,但是。。。
线程“main”java.lang.IndexOutOfBoundsException中的异常:fromIndex<0:-2147483647
在java.util.BitSet.nextSetBit(BitSet.java:701)
位于java.util.BitSet.toString(BitSet.java:1181)
位于java.lang.String.valueOf(String.java:2854)
在java.io.PrintStream.println(PrintStream.java:821)
Main.Main(Main.java:12)

Whoohoo我发现了一个java bug!这很有趣,因为IBMJDK是我(即将离职)工作场所的标准。
1
2
2147483584
-2
-1
0
0 : {0, 1, 2, 2147483584}
3 : {1, 2}
BitSet bs = new BitSet(Integer.MAX_VALUE);
bs.set(Integer.MAX_VALUE-1);
System.err.println(bs);
bs.set(Integer.MAX_VALUE);
System.err.println("Set ok but...");
System.out.println(bs);
{2147483646}
Set ok but...
Exception in thread "main" java.lang.IndexOutOfBoundsException: fromIndex < 0: -2147483647
    at java.util.BitSet.nextSetBit(BitSet.java:701)
    at java.util.BitSet.toString(BitSet.java:1181)
    at java.lang.String.valueOf(String.java:2854)
    at java.io.PrintStream.println(PrintStream.java:821)
    at Main.main(Main.java:12)