दिलचस्प पोस्ट
भारतीय नंबरिंग प्रारूप में मुद्रा प्रदर्शित मैं डिग्री से रेडियन को कैसे परिवर्तित कर सकता हूं? जेनकिंस को जेनकिंस के बाहर से बुलाते हैं? एक ++ और उपसर्ग ++ ए के लिए दो अलग-अलग तरीकों में ऑपरेटर ++ को अधिभार कैसे करें? एंड्रॉइड चेकबॉक्स के साथ सूची दृश्य में आइटम की पहचान कैसे करें क्या एक जावा फाइल में एक से अधिक वर्ग हैं? डाटा डेवलपमेंट गलती आवेदन डेवलपर्स द्वारा बनाई गई पायथन और urllib2 के साथ स्रोत इंटरफ़ेस क्या आप स्क्वैश जीटम प्रारूप-पैच के साथ एक पैच में करते हैं? गिट और पीबीएक्सप्रोजे घोषणात्मक और अनिवार्य प्रोग्रामिंग के बीच अंतर क्या है कश्मीर के बराबर क्लस्टर आकार के साथ एल्गोरिथ्म भिन्नता का मतलब है मैं अपने जेफ्रेम आकार को कैसे चिकनी कर सकता हूँ मुझे कैसे पता चलेगा कि मैंने जावास्क्रिप्ट को स्क्रॉल करना बंद कर दिया है सीएसएस का उपयोग कर पाठ चयन हाइलाइटिंग को अक्षम कैसे करें?

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

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

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

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

 public void old(){ old=current } 

तथा

 public void keepold(){ current=old } 

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

धन्यवाद

वेब के समाधान से एकत्रित समाधान "मैं जावा में एक 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();} 

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