2010-04-07 15 views
6

क्यों तत्व बदली नहीं प्राप्त करता हैबुनियादी सी # सवाल

public static void SwapArray(int[,] arr) 
    { 
     for (int i = 0; i < arr.GetLength(0); i++) 
     { 
      for (int j = 0; j < arr.GetLength(0); j++) 
      { 
       int temp = arr[i, j]; 
       arr[i, j] = arr[j, i]; 
       arr[j, i] = temp; 
      } 
     } 
    } 

भले ही पैरामीटर एक रेफरी संशोधक सरणी परिवर्तन नहीं करता है के बिना है। संदर्भ की एक प्रति पैरामीटर के रूप में पारित किया गया है?

+1

क्या आप अपना प्रश्न थोड़ा और अधिक वर्णनात्मक बनने के लिए बदल सकते हैं? 'बेसिक सी # प्रश्न' को मेरा -1 मिला। –

उत्तर

21

आपके एल्गोरिदम में कोई त्रुटि है। प्रत्येक I और j के लिए, आपका पाश arr[i,j] और arr[j,i] दो बार स्वैप करता है।

उदाहरण के लिए arr[3,1] एक बार i = 3, j = 1 और एक बार i = 1, j = 3 के लिए arr[1,3] के साथ बदल जाता है। तो परिणाम मूल मैट्रिक्स है। आपको जे-लूप को

for (int j = 0; j < i; j++) 
+1

यह सवाल का सही जवाब है। ध्यान देने योग्य एक और बात यह है कि अगर सरणी वर्ग है तो यह केवल "काम" करेगा। अगर मैं! = J तो यह उस सरणी के हिस्सों को असाइन करने का प्रयास करेगा जो मौजूद नहीं है। – cjk

+0

आपकी लूप में मूल समस्या सी # रेफरी और वैल्यू टाइप पास पैरामीटर में नहीं है, जेन्स ए द्वारा उल्लिखित अपने अहंकार को बदलें, और यह आउटपुट देखें। –

1

संदर्भ की एक प्रति पैरामीटर के रूप में पारित किया गया है?

Arrays संदर्भ द्वारा पारित किया जाता है।

SwapArray(ref int[,] arr) 

यहाँ आप संदर्भ द्वारा एक संदर्भ से गुजर रहे हैं (क्षमा करें, अनुलाप के लिए), इसका मतलब यह है कि आप भी एक संदर्भ पुन: असाइन कर सकते हैं:

arr = new int [10,20]; 
4

दूसरा arr.GetLength(0)arr.GetLength(1) होना चाहिए। क्योंकि आप दूसरे आयाम का उपयोग करना चाहते हैं।

+0

नहीं, लाइन में 'arr [i, j] = arr [j, i]; '' 'int' मान द्वारा प्रतिलिपि बनाई गई है। लेकिन आपने अगली वाक्य में असली समस्या देखी। (+1) –

1

को आजमाएं।

मैंने लूप के लिए दूसरा बदल दिया है। आप वास्तव में स्वैपिंग और फिर से reswapping। तो आप खड़े हो जाओ तुम कहाँ थे।

public static void SwapArray(int[,] arr) 
    { 
     for (int i = 0; i < arr.GetLength(0); i++) 
     { 
      for (int j = i+1; j < arr.GetLength(0); j++) 
      { 
        int temp = arr[i, j]; 
        arr[i, j] = arr[j, i]; 
        arr[j, i] = temp; 
      } 
     } 
    } 
+0

नाइटपिकिंग: आंतरिक लूप i + 1 पर शुरू होना चाहिए, न कि मैं। स्वैपिंग एआर [i, j] और arr [j, i] का मतलब क्या है यदि मैं == जे? – Niki

+0

सही मैंने i! = J के लिए एक चेक जोड़ा। लेकिन आप क्या कहते हैं सही है। इसे अभी बदल दिया धन्यवाद!!!! –

संबंधित मुद्दे