Я работаю над проектом калькулятора. Я использую метод для разделения символов и числовых значений. , но я получаю проблему, когда у меня есть десятичное значение, потому что результат показан 0, когда выполняется десятичное значение. вот код.проверить десятичную или точку Java
List<Double> numbers = new ArrayList<>();
List<Character> operators = new ArrayList<>();
..................
void testing() {
String userInput = "234+234+234";
/* ignore the line above its just for understanding */
/*the above works fine but if we change it to below its dont work.*/
String userInput = "234+2.3+4.2";
/* The both lines above are just for understanding actually i am getting text from edittext*/
String userInput = currentcalc.getText().toString();
for (char c : userInput.toCharArray()) {
\t if (!Character.isDigit(c)) {
s1 = Double.parseDouble(s2);
numbers.add(s1);
operators.add(c);
handler++;
s2 = "";
s1 = 0;
\t } else {
s = Character.toString(c);
s2 += s;
}
}
result();
}
результат = 0.0
с и с2 являются строками, а s1 является двойным. и в моем коде, если c не является цифрой, он сохраняет значение оператора, например, +, - etc, а также сохраняет значение цифр и других вещей. я хочу знать, почему ». не сохраняется с помощью этого кода и почему результат показывает 0,0
результат(); код здесь ниже
void result() {
\t \t double total4 = 0;
\t \t s1 = Double.parseDouble(s2);
\t \t numbers.add(s1);
\t \t if (handler < 1) {
\t \t \t total4 = Double.parseDouble(currentcalc.getText().toString());
\t \t } else {
\t \t \t int i = 0;
\t \t \t for (i = 0; i < handler; i++) {
\t \t \t \t switch (operators.get(i)) {
\t \t \t \t case '/':
\t \t \t \t \t total3 = numbers.get(i)/numbers.get(i + 1);
\t \t \t \t \t total4 = total3;
\t \t \t \t \t numbers.remove(i + 1);
\t \t \t \t \t numbers.set(i, total4);
\t \t \t \t \t operators.remove(i);
\t \t \t \t \t handler--;
\t \t \t \t \t i--;
\t \t \t \t \t break;
\t \t \t \t }
\t \t \t }
\t \t \t for (i = 0; i < handler; i++) {
\t \t \t \t switch (operators.get(i)) {
\t \t \t \t case '*':
\t \t \t \t \t total3 = numbers.get(i) * numbers.get(i + 1);
\t \t \t \t \t total4 = total3;
\t \t \t \t \t numbers.remove(i + 1);
\t \t \t \t \t numbers.set(i, total4);
\t \t \t \t \t operators.remove(i);
\t \t \t \t \t handler--;
\t \t \t \t \t i--;
\t \t \t \t \t break;
\t \t \t \t }
\t \t \t }
\t \t \t for (i = 0; i < handler; i++) {
\t \t \t \t switch (operators.get(i)) {
\t \t \t \t case '+':
\t \t \t \t \t total3 = numbers.get(i) + numbers.get(i + 1);
\t \t \t \t \t total4 = total3;
\t \t \t \t \t numbers.remove(i + 1);
\t \t \t \t \t numbers.set(i, total4);
\t \t \t \t \t operators.remove(i);
\t \t \t \t \t break;
\t \t \t \t case '-':
\t \t \t \t \t total3 = numbers.get(i) - numbers.get(i + 1);
\t \t \t \t \t total4 = total3;
\t \t \t \t \t numbers.remove(i + 1);
\t \t \t \t \t numbers.set(i, total4);
\t \t \t \t \t operators.remove(i);
\t \t \t \t \t break;
\t \t \t \t }
\t \t \t \t handler--;
\t \t \t \t i--;
\t \t \t }
\t \t }
\t \t et1.setText(Double.toString(total4));
\t \t resettext = 1;
\t }
Что делает ваш код, когда он пытается выполнить «.». operatator? На данный момент вы лечите "." как оператор, так же, как «+». –
Использовать механизм javascript, доступный в Java, для выражения выражения. – Wajahat
s и s2 - это строки, а s1 - двойные. и в моем коде, если c не является цифрой, он сохраняет значение оператора, например, +, - etc, а также сохраняет значение цифр и других вещей. я хочу знать, почему ». не сохраняется через этот код и почему результат показывается 0.0 – Andriopak