Как внедрить BigInteger в Integer и наоборот в моем коде, не удается решить ошибку несовместимого типа - PullRequest
0 голосов
/ 05 октября 2019

Я пытался использовать тип long в java, он работал хорошо. Но я хочу обрабатывать значения больше, чем long, поэтому я перешел в BigInteger, но в результате возникла ошибка с несовместимыми типами (BigInteger и int). Заранее спасибо.

import java.io.*;
import java.util.*;
import java.math.BigInteger;
class Main
{
public static BigInteger aryaStarkToWin(int p, int r,BigInteger[][]req_Array) {
    BigInteger a=new BigInteger("1000000007");
    BigInteger b=new BigInteger("0");
    req_Array[p][0]=wins(p, 0, 0, p, r,req_Array) ; 
    BigInteger returnValue= req_Array[p][0];
    returnValue=returnValue.mod(a);
    return returnValue ;
}
public static BigInteger wins(int aryaCounter, int sansaCounter, BigInteger chances, final int p, final int r,BigInteger[][]req_Array) {
      BigInteger a=new BigInteger("1000000007");
       BigInteger b=new BigInteger("0");
       BigInteger c=new BigInteger("1");
       BigInteger d=new BigInteger("-1");
    if(req_Array[aryaCounter][sansaCounter]!=d) {
        return req_Array[aryaCounter][sansaCounter];
    }           
    if (aryaCounter < sansaCounter * p) {                   
        return b;
    }

    if (aryaCounter + sansaCounter == r) {          
        return c;
    }        
    req_Array[aryaCounter][sansaCounter]=(wins(aryaCounter + 1, sansaCounter, chances, p, r,req_Array).mod(a).add(wins(aryaCounter, sansaCounter + 1, chances, p, r,req_Array).mod(a))).mod(a);

    return req_Array[aryaCounter][sansaCounter]; 
}
public static void main(String[] args) {
    int T_cases=0;
    Scanner scany= new Scanner(System.in);
    T_cases=scany.nextInt();
    BigInteger d=new BigInteger("-1");
    while(T_cases-->0) {        
        int no_of_rounds = scany.nextInt();
        BigInteger[][] req_Array = new BigInteger[no_of_rounds+1][no_of_rounds+1];      
        int ptimes=scany.nextInt();
        for(int i=0;i<=no_of_rounds;i++) {
            for(int j=0;j<=no_of_rounds;j++) {
                req_Array[i][j]=d;
            }
        }       
        System.out.println(aryaStarkToWin(ptimes,no_of_rounds,req_Array));              
    }
    scany.close();      
}
}

Ввод

2
4 2
2 2

Выход должен быть

3
1 

Но я получаю сообщения об ошибках, такие как

Main.java:9: error: incompatible types: int cannot be converted to BigInteger
    req_Array[p][0]=wins(p, 0, 0, p, r,req_Array) ; 
1 error

1 Ответ

0 голосов
/ 05 октября 2019

Сообщение об ошибке ясно. Третий аргумент предполагает наличие экземпляра BigInteger при вызове метода wins

Вы вызываете метод, как показано ниже:

req_Array[p][0]=wins(p, 0, 0, p, r,req_Array) ;
                           ^

И сигнатура метода:

public static BigInteger wins(int aryaCounter, int sansaCounter, BigInteger chances, final int p, final int r,BigInteger[][]req_Array) {
                                                                 ^^^^^^^^

Третий аргумент, который вы можете передать следующим образом:

req_Array[p][0]=wins(p, 0, BigInteger.ZERO, p, r,req_Array) ;

или изменить сигнатуру метода следующим образом:

public static BigInteger wins(int aryaCounter, int sansaCounter, int chances, final int p, final int r,BigInteger[][]req_Array) {

Сказав это, вы не используете шансы вВаш метод, так что лучше избавиться от того же.

...