Java和其他语言在生成子序列时的输出差异

Java和其他语言在生成子序列时的输出差异,java,c++,arrays,subsequence,Java,C++,Arrays,Subsequence,更新:我的问题是为什么Java中需要BigInteger。为什么我们不能直接在伪代码上解决这个问题,因为它在其他语言中都可以工作 这是用于生成数组子序列的伪代码 int[] arr = {1,2,3} ; int opsize = 2^size_of_array ; for (int counter = 1; counter < opsize; counter++) { for (int j = 0; j < n; j++) { if (co

更新:我的问题是为什么Java中需要BigInteger。为什么我们不能直接在伪代码上解决这个问题,因为它在其他语言中都可以工作

这是用于生成数组子序列的伪代码

int[] arr = {1,2,3} ;

int opsize = 2^size_of_array ;   

for (int counter = 1; counter < opsize; counter++)
{
    for (int j = 0; j < n; j++)
    {
        if (counter & (1<<j))
            print(arr[j] + " ");
    }
    print new line ;
}
在Java中,代码是

class Solution
{
public static void main (String[] args) throws java.lang.Exception
    {
        int[] arr = {1,2,3};
        int n = arr.length ; ;
        int res = (int) Math.pow(2,n);
        for(int i = 1 ; i < res ; i++)
        {
            for(int j = 0 ; j  < n ; j++)
                if ((i & (1<<j)) == 1 )
                    System.out.print(arr[j] + " ");
            System.out.println();
        }
    }
}
在Java中,我们需要BigInteger来解决同样的问题

int opsize = (int)Math.pow(2, n);

    for (int counter = 1; counter < opsize; counter++)
    {
        for (int j = 0; j < n; j++)
        {
            if (BigInteger.valueOf(counter).testBit(j))
                System.out.print(arr[j]+" ");
        }
        System.out.println();
    }
intopsize=(int)Math.pow(2,n);
用于(int计数器=1;计数器
编辑:我把问题读错了一点

没有BigInteger的代码有一个问题:

if ((i & (1<<j)) == 1 )
然后我们进行位移位,并使用以下二进制表示:

i = 0101
j = 0100
手术后,我们有:

0100
这显然不符合条件

如果将其更改为:

if ((i & (1<<j)) > 0 )

if((i&(10)如果由1定义的特定位这是有问题的代码行:

if ((i & (1<<j)) == 1 )
如果((i&(1您的病情不好:

(i&(1)和..您的问题是?您可以在没有BigInteger的情况下执行此操作,只需对代码进行一些其他更改。实际上,您不能调用(实例)基本类型上的方法除了缺少一个问题之外,您所说的也是完全错误的。代码在Java中执行得很好,没有使用任何
biginger
。不知道您在做什么。
n
只是神奇地出现在您的代码中?我只是假设
n
是数组的大小。但是,是的,变量的神奇外观当然没有帮助。所以你的C++问题是为什么你没有显示的一些java代码不做你期望的那样做?这不是答案。他说<代码> BigInteger <代码>代码。问题是如果你把比特移到最有效位(j=31),然后您得到一个负数,您的
>0
条件失败。C代码的等价物不是
>0
,而是
!=0
0100
if ((i & (1<<j)) > 0 )
if ((i & (1<<j)) == 1 )
if ((i & (1<<j)) != 0)
1<<j == 2 == 0b0010
i & (1<<j) == 0b0110 & 0b0010 == 0b0010 == 2