2014-09-13 10 views
6

Wie kann ich einen int mit einem BigInteger in Java vergleichen? Ich brauche speziell das wissen, wenn ein int weniger als ein BigInteger ist. Hier ist der Code, den ich verwende:Java compare integer und bigInteger

private static BigInteger two = new BigInteger("2"); 
private static BigInteger three = new BigInteger("3"); 
private static BigInteger zero = new BigInteger("0");  
public static BigInteger bigIntSqRootCeil(BigInteger x) throws IllegalArgumentException { 
    if (x.compareTo(BigInteger.ZERO) < 0) { 
     throw new IllegalArgumentException("Negative argument."); 
    } 
    if (x == BigInteger.ZERO || x == BigInteger.ONE) { 
     return x; 
    } 
    BigInteger two = BigInteger.valueOf(2L); 
    BigInteger y; 
    for (y = x.divide(two); 
      y.compareTo(x.divide(y)) > 0; 
      y = ((x.divide(y)).add(y)).divide(two)); 
    if (x.compareTo(y.multiply(y)) == 0) { 
     return y; 
    } else { 
     return y.add(BigInteger.ONE); 
    } 
} 
private static boolean isPrimeBig(BigInteger n){ 
    if (n.mod(two) == zero) 
     return (n.equals(two)); 
    if (n.mod(three) == zero) 
     return (n.equals(three)); 
    BigInteger m = bigIntSqRootCeil(n); 
    for (int i = 5; i <= m; i += 6) { 
     if (n.mod(BigInteger.valueOf(i)) == zero) 
      return false; 
     if(n.mod(BigInteger.valueOf(i + 2)) == zero) 
      return false; 
    }; 
    return true; 
}; 

Danke.

+0

Nun, warum denken Sie, dass nicht funktioniert? –

+0

@ E_net4 Ähm ... Ich weiß, warum es nicht funktioniert. Ich suche nach einer Lösung. – Progo

+2

Das ist eine Menge Code, wenn Sie "BigInt mit einem Int vergleichen" möchten. Gibt es da noch eine andere Frage? Andernfalls: http://docs.oracle.com/javase/6/docs/api/java/math/BigInteger.html#compareTo(java.math.BigInteger) 'compareTo' gibt -1 (kleiner als), 0 (gleich) oder 1 (größer als) – Gus

Antwort

16

Wie vergleiche ich einen int mit einem BigInteger in Java? Ich brauche speziell das Wissen, wenn ein Int kleiner als ein BigInteger ist.

Drehen Sie den int in eine BigInteger vor dem Vergleich:

if (BigInteger.valueOf(intValue).compareTo(bigIntegerValue) < 0) { 
    // intValue is less than bigIntegerValue 
} 
+1

+1 für das Gießen der Int in eine BigInt, vs umgekehrt. Möchte warum erwähnen – Gus

4

Statt

if (x == BigInteger.ZERO || x == BigInteger.ONE) { 
    return x; 

sollten Sie verwenden: -

if (x.equals(BigInteger.ZERO) || x.equals(BigInteger.ONE)){ 
return x; 

Außerdem sollten Sie die Integer zuerst BigInteger ändern, und dann vergleichen, wie Joe in seiner Antwort erwähnt:

Integer a=3; 
if(BigInteger.valueOf(a).compareTo(BigInteger.TEN)<0){ 
    // your code... 
} 
else{ 
    // your rest code, and so on. 
} 
+1

Obwohl es sich um ein Problem im Codeausschnitt der Frage handelt, beantwortet das nicht wirklich die Hauptfrage. –

1

Verwenden Sie einfach BigInteger.compare:

int myInt = ...; 
BigInteger myBigInt = ...; 
BigInteger myIntAsABigInt = new BigInteger(String.valueOf(myInt)); 

if (myBigInt.compareTo(myIntAsABigInt) < 0) { 
    System.out.println ("myInt is bigger than myBigInt"); 
} else if (myBigInt.compareTo(myIntAsABigInt) > 0) { 
    System.out.println ("myBigInt is bigger than myInt"); 
} else { 
    System.out.println ("myBigInt is equal to myInt"); 
}