2009-06-18 16 views
5

के लिए सरणी में तत्वों की तुलना करें मैं जावा में 5 अंकों int सरणी उत्पन्न करने की कोशिश कर रहा हूं और कहां से शुरू करना है, इस पर समस्या हो रही है। सरणी में से कोई भी संख्या डुप्लिकेट नहीं हो सकती है। मैं इसके लिए यादृच्छिक संख्याएं उत्पन्न कर सकता हूं लेकिन यह समझ नहीं सकता कि संख्याओं की तुलना एक-दूसरे से कैसे करें और किसी भी डुप्लिकेट को प्रतिस्थापित करें।डुप्लीकेट

+2

आप '5 अंक पूर्णांक सरणी' से क्या मतलब है? –

उत्तर

10

आप एक सरणी के बजाय java.util.Set का उपयोग कर सकते हैं क्योंकि यह केवल अद्वितीय तत्वों की गारंटी है।

1

इस प्रयास करें:

int[] digits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 
Random random = new Random(); 

int[] generateId() { 
    int[] clone = digits.clone(); 
    int[] id = new int[5]; 

    for (int i = 0; i < 5; i++) { 
     int candidate; 

     do { 
      candidate = random.nextInt(10); 
     } while (clone[candidate] == -1); 

     id[i] = clone[candidate]; 
     clone[candidate] = -1; 
    } 

    return id; 
} 
2

आप (जो भी उन्हें सॉर्ट जाएगा) एक TreeSet में सरणी में कनवर्ट करके डुप्लिकेट से छुटकारा पाने के कर सकते हैं:

int numbers[] { 4 5 7 6 5 7 5 89 847 7 94 093 02 10 11 10 11 }; 
TreeSet set new TreeSet(Arrays.asList(numbers)); 
for (int no : set) 
    System.out.println(no); 
4

अगर मैं तुम्हें सही ढंग से समझ, आप यादृच्छिक 5 अंक संख्या चाहते हैं, कोई अंक दोहराया नहीं गया है?

यदि ऐसा है, तो 0-9 अंकों की सूची को घुमाने के लिए एक तरीका है, फिर पहले 5 तत्व चुनें।

संपादित

Integer[] digits = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 
Random random = new Random(); 

public Integer[] generateId() { 
    List<Integer> id = Arrays.asList(digits); 
    Collections.shuffle(id, random); 
    return id.subList(0, 5).toArray(new Integer[0]); 
} 
2

इस हे में उत्पन्न (अंकों की संख्या), कोई भीतरी छोरों, कोई उथल < - विकल्पों की संख्या वास्तव में बड़ी हो जाता है अगर यह महंगा हो सकता है

int[] digits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 
Random random = new Random(); 

int[] generateId() { 
    int[] choices = digits.clone(); 
    int[] id = new int[5]; 

    for (int i = 0; i < 5; i++) { 
     // one less choice to choose from each time 
     int index = random.nextInt(choices.length - i); 
     id[i] = choices[index]; 
     // "remove" used item by replacing it with item at end of range 
     // because that index at the end won't be considered in next round 
     choices[index] = choices[choices.length - i - 1]; 
    } 

    return id; 
} 
1

एक विकल्प के रूप में, बस सरणी को सॉर्ट करें और इसे पुन: सक्रिय करें।

List<int> myList = new List<int>() { 1, 1, 2, 3, 4, 5, 5, 7 , 1, 7}; 
    myList.Sort(); 
    for (int i = myList.Count - 1; i > 0; i--) 
    { 
     if (myList[i] == myList[i - 1]) 
      myList.RemoveAt(i); 
    } 

लेकिन निश्चित रूप से यह सर्वोत्तम है कि कोई डुप्लिकेट शुरू करने के लिए न हो।

0

सबसे पहले मैं आपकी मदद करने के लिए सभी को धन्यवाद देना चाहता हूं, मैं वास्तव में इसकी सराहना करता हूं।

मुझे यह प्रोग्राम इस तरह से काम करने के लिए मिला है, लेकिन ऐसा लगता है कि हालांकि एक आसान तरीका होना चाहिए। मैंने जो किया था यह रहा। कोई और टिप्पणी भयानक होगी।

do 
    { 
     for (int i = 0; i < 5; i++) 
     { 
      iNumber = generator.nextInt(9) + 1; 
      numbers[i] = iNumber; 
     } 
    } 
    while(numbers[0] == numbers[1] || numbers[0] == numbers[2] || numbers[0] == numbers[3] || numbers[0] == numbers[4] || numbers[1] == numbers[2] || numbers[1] == numbers[3] || numbers[1] == numbers[4] || numbers[2] == numbers[3] || numbers[2] == numbers[4] || numbers[3] == numbers[4]); 
+0

देखो, बस यादृच्छिक संख्याएं उत्पन्न करें और उन्हें सेट पर रखें, जबकि इसका आकार कम या 5 के बराबर है। फिर उसे ऐरे पर निर्यात करने के लिए ऐरे विधि को कॉल करें। बेशक, ऐरे में इंटेगर्स होंगे, न कि – Sandman

+0

@ सैंडमैन: मुझे नहीं पता कि यह एक अच्छा विचार है, क्योंकि सेट एआरएआईके के तत्वों को वापस करने के आदेश के बारे में कोई गारंटी नहीं देता है। @ जॉन: इस धागे में कम से कम दो क्लीनर समाधान प्रस्तावित हैं? –

+0

@sventek: मुझे एहसास नहीं हुआ कि संख्याओं का आदेश दिया जाना है? उस मामले में मैं एक सॉर्टेडसेट का उपयोग करने का सुझाव देता हूं। यह आवेषण अधिक महंगा बनाता है, लेकिन मुझे अभी भी विश्वास है कि यह एक बहुत अच्छा समाधान है। – Sandman

0
/** 
* findDuplicate method return map where key is unique no and value as the 
* repitation 
* 
* @param a 
*   : arrays of Objects 
* @return map 
*/ 
public Map findDuplicate(T[] a) { 
    Map<T, Integer> map = new HashMap<T, Integer>(); 
    Set<T> unique = new HashSet<T>(Arrays.asList(a)); 
    int count = 0; 
    for (T integer : unique) { 
     for (T integer1 : a) { 
      if (integer == integer1) { 
       ++count; 
      } 
     } 
     map.put(integer, count); 
     count = 0; 
    } 

    return map; 
} 
संबंधित मुद्दे