मैं एक स्ट्रिंग से कुछ नंबर जोड़ने की कोशिश कर रहा हूँ उदाहरण के लिए स्ट्रिंग "5 + 3 +2" है। इसे 10 वापस करना चाहिए ऑपरेटर की संख्या प्राप्त करने के लिए यह मेरा कोड है "+"

        int opIndex= expression.indexOf("+");
        Double lhs = Double.parseDouble(expression.substring(0, opIndex));
        Double rhs = Double.parseDouble(expression.substring(opIndex+1));

बदले में मुझे जो मिला वह है lhs = 5 (जो मैं चाहता था) rhs = एक स्ट्रिंग त्रुटि लौटा दी (3+2);

मैं केवल 3 नंबर कैसे प्राप्त कर सकता हूं, फिर (5+3) या किसी अन्य दृष्टिकोण के बाद + 2 करें?

धन्यवाद।

-1
NewbieProgrammer222 13 जिंदा 2022, 14:32
आपको स्ट्रिंग को केवल एक ही नहीं ऑपरेंड और ऑपरेटरों की एक श्रृंखला में विभाजित करने की आवश्यकता है। गणित एक्सप्शन पार्सिंग पर एक ट्यूटोरियल देखने का प्रयास करें, नेट पर बहुत कुछ होना चाहिए।
 – 
Thomas
13 जिंदा 2022, 14:37
indexOf में एक startIndex के साथ एक अतिभारित संस्करण है। इसे एक लूप में इस्तेमाल करें।
 – 
f1sh
13 जिंदा 2022, 14:38
2
सबसे पहले, आपके स्ट्रिंग समीकरण में कोई - वर्ण नहीं है इसलिए opIndex -1 होगा। समीकरण के बंटवारे को थोड़ा और...मजबूत करने की जरूरत है। आपने जो किया है वह एक गणित समीकरण पार्सर है।
 – 
DevilsHnd
13 जिंदा 2022, 14:40
यदि आपको इसे पुनरावर्ती रूप से करने की आवश्यकता है, तो पहले ऑपरेंड और फिर ऑपरेटर को पढ़ें, फिर शेष स्ट्रिंग को पुनरावर्ती रूप से संसाधित करें।
 – 
f1sh
13 जिंदा 2022, 14:43
यही वह हिस्सा है जहां मैं फंस गया। क्या आप कृपया मुझे कुछ और स्पष्टीकरण या उदाहरण दे सकते हैं?
 – 
NewbieProgrammer222
13 जिंदा 2022, 14:48

4 जवाब

आप विभाजन विधि का उपयोग करके वसंत को विभाजित कर सकते हैं

String array[]=expression.split("+")

अब ऐरे को पुनरावृत्त करें और आप कर सकते हैं

1
poorwa kesharwani 13 जिंदा 2022, 14:38
क्षमा करें, मैं इस तथ्य का उल्लेख करना भूल गया कि मैं लूप का उपयोग नहीं कर सकता। केवल रिकर्सन।
 – 
NewbieProgrammer222
13 जिंदा 2022, 14:40

"आरएचएस" स्ट्रिंग कुछ इस तरह समाप्त होती है " 3 + 2"। आपका काम 3 प्राप्त करना नहीं है। आपका काम रिकर्स करना है: उस स्ट्रिंग को अपने स्वयं के एल्गोरिदम को दें, विश्वास करें कि यह काम करता है।

इस तरह रिकर्सन काम करता है: आप मानते हैं कि आपका एल्गोरिदम पहले से ही काम करता है, और फिर आप इसे लिखते हैं, खुद को बुलाते हुए, अतिरिक्त नियम के साथ कि आप केवल 'सरल' मामले के साथ खुद को कॉल कर सकते हैं (क्योंकि अन्यथा यह कभी खत्म नहीं होगा), और कि आप स्पष्ट रूप से सरलतम मामले से निपटने के लिए कोड लिखते हैं (जो इस मामले में संभवतः होगा यदि मैं आपकी विधि को केवल एक संख्या सौंपता हूं। अगर मैं इसे "5" सौंपता हूं, तो इसे 5 वापस करना होगा, और रिकर्स नहीं)।

1
rzwitserloot 13 जिंदा 2022, 14:48

यदि आप चीजों की सूची के साथ चीजों को पुनरावर्ती रूप से करते हैं, तो हमेशा निम्न पैटर्न में सोचें:

  • सूची के पहले तत्व को संभालें
  • पुनरावर्ती कॉल का उपयोग करके शेष सूची को संभालें

तो "5 + 3 +2" के मामले में, 5 और "+" को अलग कर दें और फिर बाकी ("3+2") को फिर से उसी तरीके से पास करें।

शुरू करने से पहले रिक्त स्थान को हटाना भी कहीं अधिक आसान है।

public static void main(String[] args) {
    String input = "5 + 3 + 2";
    //remove spaces:
    input = input.replaceAll(" +", "");
    int r = evaluate(input);
    System.out.println(r);
}

private static int evaluate(String s) {
    int operatorIndex = s.indexOf('+');
    if(operatorIndex == -1) {
        //no operator found, s is the last number
        //this is the base case that "ends" the recursion
        return Integer.parseInt(s);
    }
    else {
        //this is left hand side:
        int operand = Integer.parseInt(s.substring(0, operatorIndex));
        //this performs the actual addition of lhs and whatever rhs might be (here's where recursion comes in)
        return operand + evaluate(s.substring(operatorIndex+1));
    }
}

यह कोड 10 प्रिंट करता है। यदि आप भी घटाव का समर्थन करना चाहते हैं तो यह और अधिक जटिल हो जाता है, लेकिन आप इसका पता लगा लेंगे।

1
f1sh 13 जिंदा 2022, 14:52
बहुत - बहुत धन्यवाद। मैं अब इसकी अवधारणा को समझ सकता हूं।
 – 
NewbieProgrammer222
13 जिंदा 2022, 15:09
पहली बार में रिकर्सन को समझना मुश्किल है। जब आप समाधान देखते हैं तो यह बहुत स्पष्ट लगता है ... आप समय के साथ अवधारणा सीखते हैं। आप चाहें तो इस उत्तर को अपवोट और/या स्वीकार कर सकते हैं :)
 – 
f1sh
13 जिंदा 2022, 15:21

आप split() या तो + या - का उपयोग कर सकते हैं:

String[] terms = expression.split("[-+]");
0
Chris 13 जिंदा 2022, 14:39