एक पुनरावर्ती विधि लिखें जो इसे पारित स्ट्रिंग में 'ए' के ​​अवसरों की संख्या देता है

तो मैं पिछले घंटे के लिए इस समस्या के साथ झुका रहा हूँ। मुझे अप्रत्याशित प्रकार की त्रुटि मिल रही है। ऐसा लगता है कि charAt और s.length के बीच एक उलझन में है। क्या तय कर सकता है पर कोई विचार?

class lab7
{
    public static void main(String[] args)
    {
        String s = ("BCA");
    }

    public static String recursion(String s)
    {
        if (s.length()>=0)
        {
            if(s.charAt(s.length()) = A)
            {
                count++;
            }
            s.substring(0, s.length()-1);
        }
        return count;
    }
}
0
क्या यह जावा है? आपको इस्तेमाल होने वाली भाषा के साथ अपने प्रश्न को टैग करने की आवश्यकता है।
जोड़ा लेखक jwodder, स्रोत
जब तक यह एक स्कूल परियोजना नहीं है - ऐसा करने के बेहतर तरीके हैं। (रिकर्सन विशेष रूप से प्रदर्शन अनुकूल नहीं है)। जैसे कि ए को रिक्त स्थान के साथ बदलना और दो स्ट्रिंग्स की लंबाई को अलग करना, या रिकर्सन के बजाए थोड़ी देर के लूप का उपयोग करना।
जोड़ा लेखक Allan S. Hansen, स्रोत
"S.charAt होना चाहिए (एस। लम्बाई() - 1)"। स्ट्रिंग का सूचकांक शून्य से शुरू होता है
जोड़ा लेखक Bharat Jain, स्रोत

2 उत्तर

कुछ महत्वपूर्ण तर्क त्रुटियों सहित इस कोड के साथ कई समस्याएं हैं। हालांकि, आपको जो विशिष्ट त्रुटि मिल रही है वह शायद यहां है:

if(s.charAt(s.length()) = A)

सबसे पहले, ध्यान दें कि आप == के बजाय == का उपयोग कर रहे हैं, जो तुलना के बजाय असाइनमेंट करता है। यह भी ध्यान रखें कि एक चरित्र अक्षर के लिए एकल कोट्स में होना चाहिए। अभी, जावा सोचता है कि ए एक चर का नाम है, जिसे परिभाषित नहीं किया गया है। अंत में, ध्यान दें कि तार शून्य-अनुक्रमित हैं, इसलिए स्थिति s.length() पर वर्ण को देखकर आपको सीमाएं मिल जाएंगी।

मुझे उम्मीद है कि यह आपको शुरू करने में मदद करता है! एक संकेत के रूप में, हालांकि आपके कार्य को "रिकर्सन" नाम दिया गया है, क्या यह वास्तव में रिकर्सन का उपयोग करता है?

1
जोड़ा
डाउनवॉटर- क्या आप कृपया बता सकते हैं कि इस उत्तर में क्या गलत है ताकि मैं इसे सुधार सकूं?
जोड़ा लेखक templatetypedef, स्रोत

निम्नलिखित कोड स्ट्रिंग वर्ग का उपयोग करता है। प्रदर्शन महत्वपूर्ण अनुप्रयोगों के लिए आप स्ट्रिंगबफर / स्ट्रिंगबिल्डर क्लास का उपयोग कर सकते हैं।

class StringCounter
{
    public static void main (String[] args) 
    {
        int count = returnCount("ABCDABCDABCD", 0);
        System.out.println(count);
    }
    public static int returnCount(String s, int count)
    {
       //You may want to do some validations here.
        if(s.length()==0)
        {
            return count;
        }
        if(s.charAt(0)=='A')
        {
            return returnCount(s.substring(1), count+1);            
        }
        else
        {
            return returnCount(s.substring(1), count);
        }
    }
}

कोड एक समय में स्ट्रिंग पैरामीटर एक वर्ण को स्लाइस करता है और आवश्यक वर्ण के लिए जांच करता है। प्रत्येक invoke पर आगे यह गिनती और स्ट्रिंग पैरामीटर अपडेट करेगा।

इस पर कोई विचार क्या हो सकता है?

  1. आपका फ़ंक्शन रिकर्सिव नहीं है। रिकर्सिव फ़ंक्शंस कॉल स्वयं को छेड़छाड़/अद्यतन पैरामीटर के साथ।
  2. रिकर्सिव फ़ंक्शंस में अंगूठे नियम के रूप में, हमेशा मैनिप्लेटिंग फ़ंक्शन पैरामीटर के संदर्भ में सोचें।
  3. हमेशा एक आधार केस है जो रिकर्सिव कॉल को समाप्त कर देगा।
1
जोड़ा