2012-05-22 12 views
6

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

ट्यूटोरियल से उदाहरण:

String[][] names = { 
     {"Mr. ", "Mrs. ", "Ms. "}, 
     {"Smith", "Jones"} 
    }; 
System.out.println(names[0][0] + names[1][0]); // the output is "Mr. Smith"; 

मेरे उदाहरण:

public class User { 
    private static String[][] users; 
    private static int UC = 0; 

    public void addUser (String email, String name, String pass) { 
     int i = 0; 

     // Here, when I define an array this way, it has no errors in NetBeans 
     String[][] u = { {email, name, pass}, {"[email protected]", "jack sparrow", "12345"} }; 

     // But when I try to define like this, using static variable users declared above, NetBeans throws errors 
     if (users == null) { 
     users = { { email, name, pass }, {"one", "two", "three"} }; // NetBeans even doesn't recognize arguments 'email', 'name', 'pass' here. Why? 

     // only this way works 
     users = new String[3][3]; 
     users[i][i] = email; 
     users[i][i+1] = name; 
     users[i][i+2] = pass; 
     UC = UC + 1; 
     } 
    } 

गलतियों NetBeans द्वारा फेंका हैं:

अभिव्यक्ति की अवैध शुरू,

" , " अपेक्षित,

कोई बयान नहीं है।

और यह भी तर्क email, name, passusers सरणी की परिभाषा में नहीं पहचानता है। लेकिन जब मैं u सरणी परिभाषित करता हूं तो उन्हें पहचानता है।

इन दो परिभाषाओं के बीच क्या अंतर है? क्यों काम करता है लेकिन एक और परिभाषित एक और तरीका नहीं है?

उत्तर

11

आप सरणी कुल से पहले new String[][] जोड़ने की जरूरत:

users = new String[][] { { email, name, pass }, {"one", "two", "three"} }; 
+0

लेकिन मेरे पास है यह पहले से ही किया है। "पब्लिक क्लास यूजर {" की रेखा से नीचे की रेखा "निजी स्थैतिक स्ट्रिंग [] [] उपयोगकर्ता" – Green

+2

@ ग्रीन है 'नया स्ट्रिंग [] []' भाग तब लागू होता है जब आप प्रारंभिकरण और घोषणा को जोड़ते हैं; जब आप एक स्थान या एक चर को एक स्थान पर घोषित करते हैं, लेकिन इसे किसी भिन्न स्थान पर प्रारंभ करते हैं, तो आपको सरणी के समेकित ऑब्जेक्ट के प्रकार को स्पष्ट रूप से प्रदान करना होगा। – dasblinkenlight

2

पहला मामला एक प्रारंभ बयान है, जबकि दूसरा केवल एक काम है। उस तरह के भरने वाले सरणी केवल एक नई सरणी को परिभाषित करते समय समर्थित हैं।

5

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

String[][] u = {{email, name, pass}, {"[email protected]", "jack sparrow", "12345"}}; 

केवल जब आप पहली बार के लिए मैट्रिक्स की घोषणा कर रहे हैं। यह वैरिएबल पर के बाद मानों को असाइन करने के लिए काम नहीं करेगा, आपने इसे कहीं और घोषित कर दिया है, यही कारण है कि users = ... विफल हो जाता है। पहले से घोषित String[][] (या उस बात के लिए किसी भी अन्य प्रकार के एक मैट्रिक्स) के लिए मान निर्दिष्ट के लिए,

users = new String[][] { { email, name, pass }, {"one", "two", "three"} }; 
2

का उपयोग मैट्रिक्स आप का उपयोग करना चाहिए new फिर से बताए के लिए:

users = new String[][] {{email, name, pass }, {"one", "two", "three"}}; 
संबंधित मुद्दे