मैं एक स्ट्रिंग से कुछ नंबर जोड़ने की कोशिश कर रहा हूँ उदाहरण के लिए स्ट्रिंग "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 करें?
धन्यवाद।
4 जवाब
आप विभाजन विधि का उपयोग करके वसंत को विभाजित कर सकते हैं
String array[]=expression.split("+")
अब ऐरे को पुनरावृत्त करें और आप कर सकते हैं
"आरएचएस" स्ट्रिंग कुछ इस तरह समाप्त होती है " 3 + 2"
। आपका काम 3 प्राप्त करना नहीं है। आपका काम रिकर्स करना है: उस स्ट्रिंग को अपने स्वयं के एल्गोरिदम को दें, विश्वास करें कि यह काम करता है।
इस तरह रिकर्सन काम करता है: आप मानते हैं कि आपका एल्गोरिदम पहले से ही काम करता है, और फिर आप इसे लिखते हैं, खुद को बुलाते हुए, अतिरिक्त नियम के साथ कि आप केवल 'सरल' मामले के साथ खुद को कॉल कर सकते हैं (क्योंकि अन्यथा यह कभी खत्म नहीं होगा), और कि आप स्पष्ट रूप से सरलतम मामले से निपटने के लिए कोड लिखते हैं (जो इस मामले में संभवतः होगा यदि मैं आपकी विधि को केवल एक संख्या सौंपता हूं। अगर मैं इसे "5"
सौंपता हूं, तो इसे 5 वापस करना होगा, और रिकर्स नहीं)।
यदि आप चीजों की सूची के साथ चीजों को पुनरावर्ती रूप से करते हैं, तो हमेशा निम्न पैटर्न में सोचें:
- सूची के पहले तत्व को संभालें
- पुनरावर्ती कॉल का उपयोग करके शेष सूची को संभालें
तो "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
प्रिंट करता है। यदि आप भी घटाव का समर्थन करना चाहते हैं तो यह और अधिक जटिल हो जाता है, लेकिन आप इसका पता लगा लेंगे।
आप split()
या तो + या - का उपयोग कर सकते हैं:
String[] terms = expression.split("[-+]");
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।
indexOf
में एक startIndex के साथ एक अतिभारित संस्करण है। इसे एक लूप में इस्तेमाल करें।-
वर्ण नहीं है इसलिएopIndex
-1
होगा। समीकरण के बंटवारे को थोड़ा और...मजबूत करने की जरूरत है। आपने जो किया है वह एक गणित समीकरण पार्सर है।