दो समस्याएं:

  1. उपयोगकर्ता द्वारा इनपुट किए गए वाक्यांश में (वाक्यांश का अर्थ है प्रत्येक शब्द के बीच एक स्थान के साथ दो या दो से अधिक शब्द), केवल अंतिम दो शब्दों को उलट दिया जा रहा है, और वाक्यांश में कोई अन्य शब्द उलट या मुद्रित नहीं किया जा रहा है।

  2. एक शब्द में अक्षरों के क्रम को उलटने के लिए मेरा कोड (शब्द का अर्थ एक शब्द) कुछ भी प्रिंट नहीं कर रहा है, फिर भी यह बिना किसी परिणाम के इनपुट को अंतहीन रूप से स्वीकार करता है।

महत्वपूर्ण नोट: मुझे StringBuilder, arrays, या किसी अन्य "उन्नत" टूल का उपयोग करने से रोक दिया गया है। वास्तव में, यह सबसे अच्छा है कि मैं केवल एपी कंप्यूटर विज्ञान दिशानिर्देशों में संदर्भित विधियों का उपयोग करता हूं (हालांकि आवश्यक नहीं)। मैंने कई चीजों की कोशिश की है, जिसमें समायोजन पैरामीटर, विभिन्न संयोजन आदि शामिल हैं।

मुझे उम्मीद है कि "यह एक स्ट्रिंग है" का आउटपुट "स्ट्रिंग ए यह है"। इसके बजाय, यह "स्ट्रिंग ए" प्रिंट करता है। मुझे उम्मीद है कि "हेक" का आउटपुट "केसीएच" होगा। इसके बजाय, मुझे कुछ नहीं मिलता।

नोट: कोड में टिप्पणियाँ अतिरिक्त चिंताएँ और प्रश्न हैं जो मेरे पास हैं, और यह मेरे कोड को थोड़ा बेहतर समझने में मदद करने के लिए भी है। क्षमा करें यदि यह थोड़ा गड़बड़ है, तो यह मेरा पहली बार वास्तव में मेरे अपने कोड पर टिप्पणी कर रहा है।

    Scanner userInput = new Scanner(System.in);

    System.out.print("Enter a word or phrase: ");
    String str = userInput.nextLine();  //user-input string 

    String reversePhrase = "";  //placeholder for reversed phrase
    String reverseWord = "";    //placeholder for reversed word
    char reverseLetter = ' ';   //placeholder for letters in reversed word

    for(int position = 0; position < str.length(); position++)
    {
        if(str.indexOf(" ") > -1)   //checks for space in the user-input string
        {
            while(str.indexOf(" ") > -1)
            {
                reversePhrase = str.substring(0, str.indexOf(" ")); //this might be the problem, but i'm stuck on any solutions
                str = str.substring(1 + str.indexOf(" "));
                reversePhrase = str + " "+ reversePhrase;
            }
            System.out.println(reversePhrase);  //only reverses and prints last two words in phrase
        }
        else if(!(str.indexOf(" ") > -1))   //if there's no space in the user-input string
        {
            for(position = str.length() - 1; position >= 0; position --)    //does this conflict with the "for" parameter above?
            {
                while(position >= 0)    //wasn't sure what to put for this parameter
                {
                    reverseLetter = str.charAt(position);
                    reverseWord = reverseLetter + reverseWord;
                }
            }
            System.out.println(reverseWord);
        }
    }
3
dan._.theman 16 अक्टूबर 2019, 00:49
1
क्या आपने ऑर्डर को उलटने के बजाय स्टैक का उपयोग करने पर विचार किया है?
 – 
acarlstein
16 अक्टूबर 2019, 00:58
2
क्या आप एक उदाहरण इनपुट और अपेक्षित आउटपुट दे सकते हैं? उदाहरण के लिए यदि इनपुट stack overflow Daniel है तो आउटपुट Daniel overflow stack या leinaD wolfrevo kcats होना चाहिए?
 – 
Eritrean
16 अक्टूबर 2019, 01:17
1
यह वास्तव में एक अच्छा विचार है, लेकिन डैनियल लियू को "स्ट्रिंगबिल्डर, सरणी, या किसी अन्य "उन्नत" टूल का उपयोग करने से रोक दिया गया है जिसमें शायद java.util.Stack शामिल है।
 – 
FailingCoder
16 अक्टूबर 2019, 01:19
हेक, वह डालना भूल गया, क्षमा करें। वाक्यांश: "यह एक स्ट्रिंग है" "स्ट्रिंग ए यह है" में बदल जाता है। शब्द: "भूलने वाला" "लूफ़्टेग्रोफ़" में बदल जाता है।
 – 
dan._.theman
16 अक्टूबर 2019, 01:21
FailingCoder सही है, मैं स्टैक का उपयोग नहीं कर सकता, हालांकि मैं चाहता हूं कि मैं कर सकूं। मैं वास्तव में केवल लूप तक ही सीमित हूं। हालांकि सुझाव के लिए धन्यवाद!
 – 
dan._.theman
16 अक्टूबर 2019, 01:26

3 जवाब

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

कोड लिखते समय हमेशा KISS सिद्धांत का पालन करने का प्रयास करें। मूर्ख इसे सहज ही रखो। आप नेस्टेड फॉर-इफ-लूप लूप में खो गए थे जिससे यह पता लगाना मुश्किल हो जाता है कि यह कहां गलत है।

एक और सिद्धांत है: अपने तरीकों को कई कार्यों के साथ अधिभारित न करें। छोटे और सरल तरीकों का प्रयोग करें जो एक समय में केवल एक ही कार्य करते हैं। नीचे, उदाहरण के लिए, मैंने reversePhrase और reverseWord को उनके अपने तरीकों में रखा है। यह आपको एक स्वच्छ मुख्य विधि बनाने में मदद करता है।

public static void main(String args[]) {
    Scanner userInput = new Scanner(System.in);
    System.out.print("Enter a word or phrase: ");
    String str = userInput.nextLine();

    //if input contains spaces call reversePhrase otherwise reverseWord
    //str.contains(" ") is IMO cleaner, but you can change it to str.indexOf(" ") > -1 if you find it better
    if(str.contains(" ")){
        System.out.println(reversePhrase(str));
    }
    else{
        System.out.println(reverseWord(str));
    }
}

private static String reverseWord(String input) {
    String result = "";
    for(int i = input.length()-1; i >= 0; i--){
        result = result + input.charAt(i);
    }
    return result;
}

private static String reversePhrase(String input) {
    String result = "";
    while(input.contains(" ")){
        result = result + input.substring(input.lastIndexOf(" ")+1) + " ";
        input = input.substring(0, input.lastIndexOf(" "));
    }
    return result + input;
}
3
Eritrean 16 अक्टूबर 2019, 02:24

आपके लूप में:

while(position >= 0){    //wasn't sure what to put for this parameter
     reverseLetter = str.charAt(position); // position stays the same
     reverseWord = reverseLetter + reverseWord;
}

यह position के मान को नहीं बदलता है। (position कभी नहीं होगा 0) मैं अंत में position-- जोड़ने की सलाह दूंगा, जैसे:

while(position >= 0){    //wasn't sure what to put for this parameter
     reverseLetter = str.charAt(position); // position stays the same
     reverseWord = reverseLetter + reverseWord;
     position--;
}

यह position वेरिएबल का मान बदल देगा।

साथ ही, आपके कोड में एक if और एक else if है। मैं आपको else if को else में बदलने की सलाह दूंगा क्योंकि ऐसा करना व्यर्थ है:

boolean randomBoolean = new java.util.Random().nextBoolean();
if(randomBoolean){...}
else if(!randomBoolean){...} // If randomBoolean == false, then this code will execute anyway
2
FailingCoder 16 अक्टूबर 2019, 01:34
एक और "स्थिति --" नहीं जोड़ रहा है जबकि लूप व्यर्थ है क्योंकि "फॉर" लूप पैरामीटर में पहले से ही एक "स्थिति --" है? मैंने लूप में "स्थिति -" जोड़ने की कोशिश की, और मुझे उनके अंदर प्रश्न चिह्न और यादृच्छिक चीनी वर्णों के साथ बक्से का एक अनंत लूप मिलता है।
 – 
dan._.theman
16 अक्टूबर 2019, 02:26
फिर थोड़ी देर की स्थिति> = 0 लूप को हटा दें?
 – 
FailingCoder
16 अक्टूबर 2019, 23:59

मैंने for लूप में से एक को हटा दिया है, क्योंकि आपको इसकी आवश्यकता नहीं है। साथ ही, एक शब्द के केस के लिए while लूप। और पहले मामले के लिए, आप अंतिम शब्द को अस्थायी रूप से सहेजने के लिए एक और स्ट्रिंग का उपयोग कर सकते हैं। यहाँ परिणाम है:

public static void main(String[] args) {
    Scanner userInput = new Scanner(System.in);

    System.out.print("Enter a word or phrase: ");
    String str = userInput.nextLine();  //user-input string

    String reversePhrase = "";  //placeholder for reversed phrase
    String reverseWord = "";    //placeholder for reversed word
    char reverseLetter;   //placeholder for letters in reversed word
    final String space = " ";

    if(str.contains(space)) {
        while(str.contains(space))
        {
            int i = str.lastIndexOf(space);
            String lastWord = str.substring(i);
            str = str.substring(0, i);
            reversePhrase += lastWord;
        }
        //We add the first word
        reversePhrase = reversePhrase + space + str;
        System.out.println(reversePhrase.trim());
    }
    else {
        for(int position = str.length() - 1; position >= 0; position --) {
            reverseLetter = str.charAt(position);
            reverseWord =  reverseWord + reverseLetter;
        }
        System.out.println(reverseWord);
    }
}
1
Villat 16 अक्टूबर 2019, 01:57