2011-06-01 8 views
10

Estoy tratando de comparar si el valor de un BigInteger (base) es> el valor de otro BigInteger (principal) y si el valor de 'a' no es igual a uno. Si el valor de a no es 1, debería salir del ciclo. ¿Cómo debería compararlos?¿Cómo comparo los valores de BigInteger para usarlos como condición en un ciclo?

Random ran = new Random(); 
    BigInteger prime = new BigInteger(16,ran); 
    BigInteger base,a,one; 
    one = new BigInteger("1"); 

    for (int i = 0; i < 65535; i++){ 

     while (base>prime){ 
      base = new BigInteger(16,ran); 
     } 
     a = base.modPow(prime.subtract(one),prime); 
     System.out.println("a: "+a);  
     if (a != one){ 
      break;   
     } 
    } 

Respuesta

23

Puede compararlos usando BigInteger.compareTo(BigInteger).

En su caso, esto sería while (base.compareTo(prime) > 0) {...}.

Además, su condición de terminación se debe cambiar if (a != one)-if (!a.equals(one)) ya que dos BigInteger variables con el mismo valor entero no están necesariamente haciendo referencia al mismo objeto (que es todo lo que prueba == y !=).

6

Dado que BigInteger s son objetos, debe tener precaución al usar los operadores de igualdad. En este momento, está realizando una comparación de referencia (que en este caso, es más que probable que falle). Tendrá que utilizar los métodos equals() o compareTo().

BigInteger tiene una variable estática incorporada que representa uno. Utilice el método equals() o el método para comparar los valores compareTo():

if (!a.equals(BigInteger.ONE)) { 
    ... 
} 

-o-

if (a.compareTo(BigInteger.ONE) != 0) { 
    ... 
} 

espero que ayude! Consulte aquí para obtener más información: http://download.oracle.com/javase/6/docs/api/java/math/BigInteger.html

+2

Parece que se necesita tanto compareTo y es igual. Vea aquí: "... y si el valor de 'a' no es igual a uno. Si el valor de a no es 1, debería salir del ciclo". Además, su código muestra una verificación de la igualdad entre el nuevo BigInteger que hizo llamado "uno" y el otro valor calculado "a". Perdón por el enlace obsoleto. –

+0

Bastante, me perdí el bit 'if (a! = One)'. –

0

Tal

while (base.compareTo(prime)>0){ 
//rest of your loop 
} 
Cuestiones relacionadas