दिलचस्प पोस्ट
कैसे एक GridView ताज़ा करने के लिए? कैसे एक बटन का उपयोग करने के लिए एक सतत चलने पृष्ठभूमि कार्यकर्ता को प्रारंभ और रोकें myLocationOverlay मार्कर को बदलने MySQL क्वेरी से nth रिकॉर्ड लौटें मैं कैसे निर्धारित कर सकता हूं कि बार-बार विंडोज इंस्टालर के स्वयं-मरम्मत का क्या कारण है? अपाचे स्पार्क वेब यूआई में "स्टेज स्किप" का क्या मतलब है? क्या C ++ या C में foo (void) और foo () के बीच अंतर है? MySql php: यदि रो मौजूद है तो जांचें इमर्सिव मोड नेविगेशन वॉल्यूम प्रेस या कम से कम-पुनर्स्थापना के बाद चिपचिपा हो जाता है JSONArray से JSONObject प्राप्त करना एंड्रॉइड प्रोजेक्ट में लाइब्रेरी प्रोजेक्ट कैसे जोड़ूं? सी में संदर्भ द्वारा डिफ़ॉल्ट रूप से पारित सरणियों या सूचियों हैं? सेट क्यों करता है JCheckBox पर चयन प्रभाव को खो? मैं अनचाहे डाली चेतावनियों को कैसे संबोधित करूं? अन्य (बोलचाल) भाषाओं में कोडिंग

मैं जावा में एक 2 आयामी सरणी कैसे कॉपी करूं?

मुझे उस प्रोजेक्ट के लिए काफी बड़ी 2 आयामी सरणी की एक प्रति बनाने की आवश्यकता है जिस पर मैं काम कर रहा हूं। मेरे दो 2 डी सरणियाँ हैं:

int[][]current; int[][]old; 

मेरे पास प्रतिलिपि करने के लिए दो तरीके भी हैं मुझे सरणी की प्रतिलिपि बनाने की आवश्यकता है क्योंकि वर्तमान में नियमित रूप से अद्यतन किया जा रहा है।

 public void old(){ old=current } 

तथा

 public void keepold(){ current=old } 

हालांकि, यह काम नहीं करता है यदि मैं बूढ़ी कॉल करता हूं, तो वर्तमान में अपडेट करें, और फिर रखे कॉल करें, वर्तमान वह मूल के समान नहीं है। ऐसा क्यों होगा?

धन्यवाद

Solutions Collecting From Web of "मैं जावा में एक 2 आयामी सरणी कैसे कॉपी करूं?"

current=old या old=current बनाता है दो सरणी एक ही बात को देखें, इसलिए यदि आप बाद में current संशोधित करते हैं, तो old को भी संशोधित किया जाएगा। सरणी की सामग्री को किसी अन्य सरणी में कॉपी करने के लिए, लूप का उपयोग करें

 for(int i=0; i<old.length; i++) for(int j=0; j<old[i].length; j++) old[i][j]=current[i][j]; 

पुनश्च: एक-आयामी सरणी के लिए, आप Arrays.copyOf का उपयोग करके लूप के लिए अपना स्वयं का निर्माण करने से बच सकते हैं

 /** * Clones the provided array * * @param src * @return a new clone of the provided array */ public static int[][] cloneArray(int[][] src) { int length = src.length; int[][] target = new int[length][src[0].length]; for (int i = 0; i < length; i++) { System.arraycopy(src[i], 0, target[i], 0, src[i].length); } return target; } 

क्या इस कोड को ऑब्जेक्ट के एन-आयामी arrays का समर्थन करने के लिए संभव है?

आपको सरणियों के मनमानी लम्बाई का समर्थन करने और जांचना होगा कि स्रोत और गंतव्य के समान आयाम हैं या नहीं, और ऑब्जेक्ट एक सरणी भी था, तो आपको प्रत्येक सरणी के प्रत्येक तत्व को प्रतिलिपि बनाने की आवश्यकता होगी।

जब मैंने इसे पोस्ट किया, तब से कुछ समय हो गया है, लेकिन मुझे एक n-आयामी सरणी वर्ग बनाने का एक अच्छा उदाहरण मिला। क्लास निर्माता में शून्य या अधिक पूर्णांक लेता है, प्रत्येक आयाम के संबंधित आकार को निर्दिष्ट करते हुए। क्लास एक अंतर्निहित फ्लैट सरणी Object[] का उपयोग करता है और आयामों और मल्टीप्लायर की एक सरणी का उपयोग करके प्रत्येक तत्व के सूचक की गणना करता है। (सी कैसे सी प्रोग्रामिंग भाषा में arrays किया जाता है।)

NDimensionalArray की एक आवृत्ति प्रतिलिपि किसी भी अन्य 2 डी सरणी की प्रतिलिपि के रूप में आसान होगी, यद्यपि आपको दावा करना होगा कि प्रत्येक NDimensionalArray ऑब्जेक्ट के बराबर आयाम हैं। संभवत: ऐसा करने का सबसे आसान तरीका है, क्योंकि इसमें कोई पुनरावर्ती नहीं है, और यह प्रतिनिधित्व करता है और बहुत आसान पहुंच देता है।

मैंने सिस्टम एराकॉपी का उपयोग करते हुए बहुआयामी अंतर एआरए की प्रतिलिपि बनाने के लिए एक साधारण कार्य लिखकर हल किया

 public static void arrayCopy(int[][] aSource, int[][] aDestination) { for (int i = 0; i < aSource.length; i++) { System.arraycopy(aSource[i], 0, aDestination[i], 0, aSource[i].length); } } 

या वास्तव में मैंने इसे मेरे उपयोग के मामले में सुधार किया है:

 /** * Clones the provided array * * @param src * @return a new clone of the provided array */ public static int[][] cloneArray(int[][] src) { int length = src.length; int[][] target = new int[length][src[0].length]; for (int i = 0; i < length; i++) { System.arraycopy(src[i], 0, target[i], 0, src[i].length); } return target; } 
 current = old ; 

असाइनमेंट ऑपरेशन एक सरणी के दूसरे तत्वों को प्रतिलिपि नहीं करता है आप current मैट्रिक्स बना रहे हैं old मैट्रिक्स को देखें आपको एक सदस्य की प्रतिलिपि बनाने की ज़रूरत है

जावा में एरेज़ ऑब्जेक्ट हैं, और सभी ऑब्जेक्ट संदर्भ से पास किए जाते हैं। एक सरणी के लिए वास्तव में "प्रतिलिपि" करने के लिए, एक सरणी के लिए दूसरा नाम बनाने के बजाय, आपको एक नया सरणी बनाने और सभी मानों की प्रतिलिपि बनाना होगा ध्यान दें कि System.arrayCopy 1-आयामी arrays को पूरी तरह कॉपी करेंगे, लेकिन 2-आयामी arrays नहीं। कारण यह है कि 2 डी सरणी वास्तव में 1D सरणियों का 1D सरणी है, और सरकॉपी प्रतिलिपियों को एक ही आंतरिक 1D सरणियों पर कॉपी करता है।

 public static byte[][] arrayCopy(byte[][] arr){ if(arr!=null){ int[][] arrCopy = new int[arr.length][] ; System.arraycopy(arr, 0, arrCopy, 0, arr.length); return arrCopy; }else { return new int[][]{};} } 

आप निम्नानुसार भी कर सकते हैं:

 public static int[][] copy(int[][] src) { int[][] dst = new int[src.length][]; for (int i = 0; i < src.length; i++) { dst[i] = Arrays.copyOf(src[i], src[i].length); } return dst; } 

मैं इस फ़ंक्शन का उपयोग कर रहा हूं:

 public static int[][] copy(final int[][] array) { if (array != null) { final int[][] copy = new int[array.length][]; for (int i = 0; i < array.length; i++) { final int[] row = array[i]; copy[i] = new int[row.length]; System.arraycopy(row, 0, copy[i], 0, row.length); } return copy; } return null; } 

इस दृष्टिकोण का बड़ा फायदा यह है कि यह उन सरणियों को भी प्रतिलिपि बना सकता है, जिनकी समान पंक्ति संख्या नहीं है जैसे कि:

 final int[][] array = new int[][] { { 5, 3, 6 }, { 1 } }; 

यहाँ आप लूप का उपयोग करके यह कैसे कर सकते हैं।

 public static int[][] makeCopy(int[][] array){ b=new int[array.length][]; for(int row=0; row<array.length; ++row){ b[row]=new int[array[row].length]; for(int col=0; col<b[row].length; ++col){ b[row][col]=array[row][col]; } } return b; } 

आप कोड नीचे एक कोशिश दे सकते हैं,

 public void multiArrayCopy(int[][] source,int[][] destination){ destination=source.clone();} 

मुझे भरोसा है ये काम करेगा।