2013-05-09 6 views
8

मैं जावा के लिए नया हूं और अभी भी सीख रहा हूं, इसलिए इसे ध्यान में रखें। मैं एक प्रोग्राम लिखने की कोशिश कर रहा हूं जहां कोई उपयोगकर्ता एक कीवर्ड टाइप कर सकता है और यह इसे संख्याओं में परिवर्तित कर देगा और उसे सरणी में रखेगा। मेरी समस्या यह है कि सरणी को int को दोहराने की आवश्यकता है।जावा ऐरे दोहराया

मेरे कोड है:

String keyword=inputdata.nextLine(); 
int[] key = new int[keyword.length()]; 
for (int k = 0; k < keyword.length(); ++k) 
{ 
    if (keyword.charAt(k) >= 'a' && keyword.charAt(k) <= 'z') 
    { 
     key[k]= (int)keyword.charAt(k) - (int)'a'; 
    } 
} 

अभी अगर मैं किसी भी key[i]keyword.length यह एक outofbounds त्रुटि फेंकता है की तुलना में अधिक प्राप्त करने की कोशिश। मुझे इसे infinte होने की जरूरत है।

तो बुनियादी तौर पर, अगर keyword.length() 3 थे मैं अगर key[2]key[5] और key[8] और इतने पर के रूप में ही है देखने के लिए सक्षम होने की जरूरत है।

आपकी मदद के लिए धन्यवाद!

+0

++ के, लेकिन के + = keyword.length(); – Hydroid

+0

क्या यह जानबूझकर है, कि आप 0 में कुछ तत्वों को छोड़ देते हैं? – hyde

उत्तर

4

ठीक है, पहले अपने कोड को थोड़ा सा रिफैक्टरिंग के साथ ठीक करना सबसे आसान है। एक स्थानीय चर के लिए keyword.charAt(k) के सभी उपयोगों निकालें:

for (int k = 0; k < keyword.length(); ++k) 
{ 
    char c = keyword.charAt(k); 
    if (c >= 'a' && c <= 'z') 
    { 
     key[k] = c'a'; 
    } 
} 

फिर हम % ऑपरेटर के साथ इस मुद्दे को ठीक कर सकते हैं:

// I assume you actually want a different upper bound? 
for (int k = 0; k < keyword.length(); ++k) 
{ 
    char c = keyword.charAt(k % keyword.length()); 
    if (c >= 'a' && c <= 'z') 
    { 
     key[k] = c - 'a'; 
    } 
} 

आप वास्तव में keyword से अधिक समय key बनाने संभालने है कि - और आप शायद करना चाहते हैं लूप के ऊपरी बाउंड को भी बदलें। उदाहरण के लिए:

int[] key = new int[1000]; // Or whatever 
for (int k = 0; k < key.length; ++k) 
{ 
    char c = keyword.charAt(k % keyword.length()); 
    if (c >= 'a' && c <= 'z') 
    { 
     key[k] = c - 'a'; 
    } 
} 
संबंधित मुद्दे