Java 大整数计算问题

Java 大整数计算问题,java,Java,我正在使用以下代码,但是参数没有传递给方法 BigInteger p = BigInteger.valueOf(0); BigInteger u1 = obj.bigi_calc(g1, l); 在这个g1中,l是长值 方法是 private BigInteger bigi_calc(long g1, long l){ BigInteger cal = BigInteger.valueOf(g1); BigInteger cal1= Bi

我正在使用以下代码,但是参数没有传递给方法

BigInteger p = BigInteger.valueOf(0);
BigInteger u1 = obj.bigi_calc(g1, l);
在这个g1中,l是长值

方法是

private BigInteger bigi_calc(long g1, long l){           

        BigInteger cal = BigInteger.valueOf(g1);
        BigInteger cal1= BigInteger.valueOf(l);
        for(BigInteger f = BigInteger.ONE;f.compareTo(cal1)>0;f=f.add(BigInteger.ONE)){
            //BigInteger p= BigInteger.valueOf(0);
            p = cal.multiply(cal1);
            System.out.println("check p"+p);
        }
    //  System.out.println("check p"+p);
        return p;
    }
elipse显示它可能不同步,但参数不会传递给函数。
您能帮我解决这个问题吗?

您是否声明了
biginger p=biginger.valueOf(0)
作为
bigi_calc
之外的局部变量?因为在这种情况下,
p
的范围不会扩展到方法
bigi\u calc

您可以选择:

  • p
    作为第三个参数传递
  • 将其设置为成员字段
要执行第一个选项,请执行以下操作:

private BigInteger bigi_calc(long g1, long l, BigInteger p) { ... }

//...
BigInteger p = BigInteger.valueOf(0);
BigInteger u1 = obj.bigi_calc(g1, l, p);
static BigInteger pow(long base, long exp){              
    BigInteger result = BigInteger.ONE;
    BigInteger biBase = BigInteger.valueOf(base);
    for (long i = 0; i < exp; i++) {
        result = result.multiply(biBase);
    }
    return result;
}

进一步检查代码发现它没有任何意义。如果这就是你要计算的,那么就有一个。当循环计数器不超过
long
时,使用
biginger
作为循环计数器是不必要的混乱

如果
pow(long base,long exp)
是您想要的,并且由于某些原因您不允许使用
biginger.pow
,那么您可以这样编写:

private BigInteger bigi_calc(long g1, long l, BigInteger p) { ... }

//...
BigInteger p = BigInteger.valueOf(0);
BigInteger u1 = obj.bigi_calc(g1, l, p);
static BigInteger pow(long base, long exp){              
    BigInteger result = BigInteger.ONE;
    BigInteger biBase = BigInteger.valueOf(base);
    for (long i = 0; i < exp; i++) {
        result = result.multiply(biBase);
    }
    return result;
}
static biginger pow(长基,长扩展){
BigInteger结果=BigInteger.ONE;
biginger biBase=biginger.valueOf(base);
用于(长i=0;i
您想做什么?此代码没有意义。有关更快的求幂,请参见,但除非这是家庭作业,否则您应该只使用
biginger.pow