तो मैं एक सॉलिटेयर एन्क्रिप्शन प्रोग्राम बनाने की कोशिश कर रहा था, लेकिन जब इस विधि की बात आती है तो मैं एक समस्या में भागता रहता हूं। चार सरणी a उपयोगकर्ता इनपुट शब्द का प्रतिनिधित्व करता है (इसे आसान बनाने के लिए इसे एक सरणी में परिवर्तित करता है) और चार सरणी b अक्षर का प्रतिनिधित्व करता है इसलिए इसमें 25 इंडेक्स हैं। मैं जो करने की कोशिश कर रहा हूं वह वर्णमाला से उसकी संख्या से मेल खाता है। यह काफी आसान लग रहा था लेकिन मुझे एक कठिन समय हो रहा है क्योंकि यह एक ArrayIndexOutOfBoundsException फेंकता रहता है। मैंने लूप के लिए उपयोग करने की कोशिश की है, लूप और अन्य परीक्षणों के लिए नेस्टेड है लेकिन यह अपवाद फेंकता रहता है या केवल अप्रत्याशित परिणाम जैसे [0, 0, 0, 0, 0] आउटपुट करता है। मैंने इसे डीबग किया है और ऐसा लगता है कि b[i] कभी भी a[j] के बराबर नहीं होता है, इसलिए j हमेशा 0 होगा।

public static int[] converter(char[] a, char[] b){
    int[] res = new int[a.length];
    int i = 0;
    int j = 0;
    while(i < a.length){
        if(b[i] == Character.toUpperCase(a[j])){ //Does not run through the first loop at all
            res[j] = i + 1;
            j = j + 1;
        } else {
            i = i + 1;
        }
    }
    return res;
}

कृपया इसी तरह के प्रश्न को लिंक न करें। यह मेरे प्रश्न का उत्तर नहीं देता है।

1
Kidus Asmare Ayele 17 जिंदा 2020, 23:41

1 उत्तर

सबसे बढ़िया उत्तर

नीचे दिया गया कोड एक समाधान है। हम चाहते हैं कि कैरेक्टर इंडेक्स शब्द के माध्यम से उस स्थान को देखने के लिए पुनरावृत्त करे जहां एक चरित्र है। कैरेक्टर इंडेक्स शब्द कैरेक्टर इंडेक्स में मौजूद शब्द के कैरेक्टर के साथ तुलना करने के लिए वर्णों के माध्यम से पुनरावृति करता है। परिणाम सेट करने के बाद, हमें कैरेक्टर इंडेक्स को रीसेट करने की आवश्यकता है ताकि यह अन्य शब्द वर्णों के साथ तुलना करने के लिए वर्ण सरणी में पहले वर्ण पर वापस चला जाए, यदि हम नहीं करते हैं, तो शब्द के निम्नलिखित वर्णों को एक पर होना चाहिए उच्च वर्ण सूचकांक, जो हम नहीं चाहते हैं। नामकरण चर वास्तविक शब्दों को बेहतर ढंग से समझने के लिए बहुत महत्वपूर्ण है कि आप अपने कोड में क्या करने की कोशिश कर रहे हैं। जब आप b[i] के माध्यम से पुनरावृति कर रहे थे तब आप i

public static int[] converter(char[] word, char[] characters){
    int[] result = new int[word.length];
    int characterIndex = 0;
    int wordCharacterIndex = 0;
    while(wordCharacterIndex < word.length){
        if(characters[characterIndex] == Character.toUpperCase(word[wordCharacterIndex])){
            result[wordCharacterIndex] = characterIndex + 1;
            wordCharacterIndex++;
            characterIndex = 0;
        } else {
            characterIndex++;
        }
    }
    return result;
}
2
Demomaker 17 जिंदा 2020, 21:35