मैं हेवन ' टी ने इसका परीक्षण नहीं किया - लेकिन यह आपको एक सामान्य विचार देना चाहिए जिस दिशा में आपको लेने की जरूरत है।
इस काम करने के लिए के लिए, मैं TextView
के पाठ के बारे में कुछ बातें मान जा रहा हूँ:
TextView
"\n"
साथ सीमांकित लाइनें शामिल हैं।
- पहली पंक्ति में एक ऑपरेटर (+, -, * या /) शामिल नहीं होगा।
- पहली पंक्ति के बाद
TextView
में लाइनों के परिवर्तनशील हो सकता है जो सभी शामिल होंगे एक ऑपरेटर और एक संख्या।
- एक ऑपरेटर हमेशा लाइन के पहले
Char
होगा। String input = tv1.getText().toString();
तो हम उसे विभाजित प्रत्येक पंक्ति के लिए:
int total = Integer.parseInt(lines[0].trim()); //We know this is a number.
for(int i = 1; i < lines.length(); i++) {
total = calculate(lines[i].trim(), total);
}
: String[] lines = input.split("\n");
अब हम कुल मूल्य की गणना करने की जरूरत है
पहले हम पाठ मिलता है
विधि गणना इस तरह दिखनी चाहिए, यह मानते हुए कि हम पहलेको जानते हैं एक पंक्ति काऑपरेटर है:
private int calculate(String input, int total) {
switch(input.charAt(0))
case '+':
return total + Integer.parseInt(input.substring(1, input.length());
case '-':
return total - Integer.parseInt(input.substring(1, input.length());
case '*':
return total * Integer.parseInt(input.substring(1, input.length());
case '/':
return total/Integer.parseInt(input.substring(1, input.length());
}
संपादित
तो ऊपर के रूप में टिप्पणी में कहा गया है नीचे करता है "बाएँ-से-सही" गणना, सामान्य आदेश की अनदेखी (+ और/पहले + और -)।
निम्नलिखित गणना सही तरीके से करता है:
String input = tv1.getText().toString();
input = input.replace("\n", "");
input = input.replace(" ", "");
int total = getValue(input);
विधि getValue
एक पुनरावर्ती विधि है और यह इस तरह दिखना चाहिए:
private int getValue(String line) {
int value = 0;
if(line.contains("+")) {
String[] lines = line.split("\\+");
value += getValue(lines[0]);
for(int i = 1; i < lines.length; i++)
value += getValue(lines[i]);
return value;
}
if(line.contains("-")) {
String[] lines = line.split("\\-");
value += getValue(lines[0]);
for(int i = 1; i < lines.length; i++)
value -= getValue(lines[i]);
return value;
}
if(line.contains("*")) {
String[] lines = line.split("\\*");
value += getValue(lines[0]);
for(int i = 1; i < lines.length; i++)
value *= getValue(lines[i]);
return value;
}
if(line.contains("/")) {
String[] lines = line.split("\\/");
value += getValue(lines[0]);
for(int i = 1; i < lines.length; i++)
value /= getValue(lines[i]);
return value;
}
return Integer.parseInt(line);
}
विशेष मामलों है कि पुनरावर्ती विधि से हैंडल नहीं करता :
- यदि पहला नंबर नकारात्मक है उदाहरण के लिए -3 + 5 * 8।
- डबल ऑपरेटरों उदा। 3 * -6 या 5/-4।
यह भी तथ्य है कि हम Integers
का उपयोग कर रहे हैं, कुछ मामलों में कुछ "विषम" परिणाम दे सकते हैं उदा। 5/3 = 1.
आप उन संख्याओं के अलावा का परिणाम दिखाना चाहते हैं ..? – Mudassir
समस्या क्या है ?? – freshDroid
मेरा प्रश्न है, मेरे पास एक टेक्स्टव्यू में 5 + 9 मान है जैसा कि मैंने पहले ही उल्लेख किया है।, तो यह मान कैसे प्राप्त करें tv.getText()। ToString(); –