2011-06-01 4 views
10

मैं तुलना करने की कोशिश कर रहा हूं कि एक बिगइंटर (आधार) का मूल्य> किसी अन्य बिगइंटर (प्राइम) का मान है और यदि 'ए' का मान एक के बराबर नहीं है। यदि कोई मान 1 नहीं है, तो इसे लूप से बाहर करना चाहिए। मुझे उनकी तुलना कैसे करनी चाहिए?मैं लूप में किसी शर्त के रूप में उपयोग करने के लिए BigInteger के मानों की तुलना कैसे करूं?

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;   
     } 
    } 

उत्तर

23

आप BigInteger.compareTo(BigInteger) का उपयोग करके उनकी तुलना कर सकते हैं।

आपके मामले में, यह while (base.compareTo(prime) > 0) {...} होगा।

इसके अलावा, अपने समापन हालत एक ही पूर्णांक मान के साथ दो BigInteger चर के बाद से if (!a.equals(one)) करने के लिए if (a != one) से बदला जाना चाहिए जरूरी एक ही वस्तु (जो कि सभी == और != परीक्षण है) को संदर्भित नहीं कर रहे हैं।

6

चूंकि BigInteger एस ऑब्जेक्ट्स हैं, तो आपको समानता ऑपरेटरों का उपयोग करते समय सावधानी बरतनी चाहिए। अभी, आप एक संदर्भ तुलना कर रहे हैं (जो इस मामले में, असफल होने की संभावना से अधिक होगा)। आपको equals() या compareTo() विधियों का उपयोग करने की आवश्यकता होगी।

बिगइंटर में एक अंतर्निहित स्थैतिक चर है जो एक का प्रतिनिधित्व करता है। मानों की तुलना करने equals() विधि या compareTo() विधि का उपयोग करें:

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

-या-

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

आशा है कि मदद करता है! अधिक जानकारी के लिए देखें: http://download.oracle.com/javase/6/docs/api/java/math/BigInteger.html

+2

ऐसा लगता है कि वह दोनों compareTo की जरूरत है और बराबर होती है। यहां देखें: "... और यदि 'ए' का मान एक के बराबर नहीं है। यदि कोई मान 1 नहीं है, तो इसे लूप से बाहर करना चाहिए।" इसके अलावा, उसका कोड नए बिगइंटर के बीच समानता के लिए एक चेक दिखाता है जिसे उसने "एक" और अन्य गणना मूल्य "ए" कहा था। पुरानी लिंक के लिए खेद है। –

+0

पर्याप्त मेला, मैंने 'if (a! = One)' बिट को याद किया। –

0

शायद

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