Как создать калькулятор на java
Перейти к содержимому

Как создать калькулятор на java

  • автор:

Как создать калькулятор на java

Зная некоторые основы компоновки и такие элементы как TextView, EditText и Button, уже можно составить более менее полноценное приложение. В данном случае мы сделаем простенький калькулятор.

Для этого создадим новый проект и определим в файле activity_main.xml следующий интерфейс:

В итоге весь интерфейс будет выглядеть следующим образом:

Калькулятор на Android и Java

Корневой контейнер компоновки представляет элемент ConstraintLayout . Сверху в нем определены два текстовых поля TextView: одно для вывода результата вычислений и одно для вывода текущего знака операции.

Затем идет элемент EditText, предназначенный для ввода чисел.

И далее расположены четыре элемента LinearLayout с горизонтальными рядами кнопок. Чтобы все кнопки занимали равное пространство внутри контейнера, для них установлены атрибуты android:layout_weight=»1″ и android:layout_width=»0dp» .

Для каждой кнопки установлен идентификатор, чтобы в коде можно было прикрепить к ней определенный обработчик нажатия.

Теперь изменим класс MainActivity :

package com.metanit.calculator; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends AppCompatActivity < TextView resultField; // текстовое поле для вывода результата EditText numberField; // поле для ввода числа TextView operationField; // текстовое поле для вывода знака операции Double operand = null; // операнд операции String lastOperation = "="; // последняя операция @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // получаем все поля по id из activity_main.xml resultField = findViewById(R.id.resultField); numberField = findViewById(R.id.numberField); operationField = findViewById(R.id.operationField); findViewById(R.id.add).setOnClickListener((view)->onOperationClick("+")); findViewById(R.id.sub).setOnClickListener((view)->onOperationClick("-")); findViewById(R.id.mul).setOnClickListener((view)->onOperationClick("*")); findViewById(R.id.div).setOnClickListener((view)->onOperationClick("/")); findViewById(R.id.eq).setOnClickListener((view)->onOperationClick("=")); findViewById(R.id.n0).setOnClickListener((view)->onNumberClick("0")); findViewById(R.id.n1).setOnClickListener((view)->onNumberClick("1")); findViewById(R.id.n2).setOnClickListener((view)->onNumberClick("2")); findViewById(R.id.n3).setOnClickListener((view)->onNumberClick("3")); findViewById(R.id.n4).setOnClickListener((view)->onNumberClick("4")); findViewById(R.id.n5).setOnClickListener((view)->onNumberClick("5")); findViewById(R.id.n6).setOnClickListener((view)->onNumberClick("6")); findViewById(R.id.n7).setOnClickListener((view)->onNumberClick("7")); findViewById(R.id.n8).setOnClickListener((view)->onNumberClick("8")); findViewById(R.id.n9).setOnClickListener((view)->onNumberClick("9")); findViewById(R.id.comma).setOnClickListener((view)->onNumberClick(",")); > // сохранение состояния @Override protected void onSaveInstanceState(Bundle outState) < outState.putString("OPERATION", lastOperation); if(operand!=null) outState.putDouble("OPERAND", operand); super.onSaveInstanceState(outState); >// получение ранее сохраненного состояния @Override protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) < super.onRestoreInstanceState(savedInstanceState); lastOperation = savedInstanceState.getString("OPERATION"); operand= savedInstanceState.getDouble("OPERAND"); resultField.setText(operand.toString()); operationField.setText(lastOperation); >// обработка нажатия на числовую кнопку public void onNumberClick(String number) < numberField.append(number); if(lastOperation.equals("=") && operand!=null)< operand = null; >> // обработка нажатия на кнопку операции public void onOperationClick(String op)< String number = numberField.getText().toString(); // если введенно что-нибудь if(number.length()>0)< number = number.replace(',', '.'); try< performOperation(Double.valueOf(number), op); >catch (NumberFormatException ex) < numberField.setText(""); >> lastOperation = op; operationField.setText(lastOperation); > private void performOperation(Double number, String operation) < // если операнд ранее не был установлен (при вводе самой первой операции) if(operand ==null)< operand = number; >else < if(lastOperation.equals("="))< lastOperation = operation; >switch(lastOperation) < case "=": operand =number; break; case "/": if(number==0)< operand =0.0; >else < operand /=number; >break; case "*": operand *=number; break; case "+": operand +=number; break; case "-": operand -=number; break; > > resultField.setText(operand.toString().replace('.', ',')); numberField.setText(""); > >

Разберем этот код. Вначале в методе onCreate() получаем все поля из activity_main.xml, текст которых будет изменяться:

resultField = findViewById(R.id.resultField); numberField = findViewById(R.id.numberField); operationField = findViewById(R.id.operationField);

Далее для каждой кнопки назначаем определенный обработчик нажатия — в зависимости от типа кнопки это либо метод onNumberClick , в который передается нажатое число, либо onOperationClick , в который передается знак операции.

Результат операции будет попадать в переменную operand, которая представляет тип Double, а знак операции — в переменную lastOperation:

Double operand = null; String lastOperation = " brush:java;"> numberField.append(number); if(lastOperation.equals(" равно"), то мы сбрасываем переменную operand.

В методе onOperationClick происходит обработка нажатия на кнопку со знаком операции:

String number = numberField.getText().toString(); if(number.length()>0)< number = number.replace(',', '.'); try< performOperation(Double.valueOf(number), op); >catch (NumberFormatException ex) < numberField.setText(""); >> lastOperation = op; operationField.setText(lastOperation);

Здесь получаем ранее введенное число и введенную операцию и передаем их в метод performOperation() . Так как в метод передается не просто строка, а число Double, то нам надо преобразовать строку в чсло. И поскольку теоретически могут быть введены нечисловые символы, то для отлова исключения, которое может возникнуть при преобразовании используется конструкция try. catch.

Кроме того, так как разделителем целой и дробной части в Double в java является точка, то нам надо заменить запятую на точку, так как предполагается, что мы используем в качестве разделителя запятую.

А методе performOperation() выполняем собственно операцию. При вводе первой операции, когда операнд еще не установлен, мы просто устанавливаем операнд:

if(operand ==null)

При вводе второй и последующих операций применяем предыдущую операцию, знак которой хранится в переменной lastOperation, к операнду operand и второму числу, которое было введено в числовое поле. Полученный результат операции сохраняем в переменной operand.

консольный калькулятор на java

сразу выдавал ответ а не требовал запуска программы листинг моего калькулятора.

import java.util.Scanner; public class calculator < private static Scanner read; public static void main (String[] args)< read = new Scanner(System.in); double first; double second; String operator; System.out.print(">> "); first = read.nextDouble(); operator = read.next(); second = read.nextDouble(); if (operator.equals("*")) < System.out.println("= " + (first * second)); >if (operator.equals("/")) < System.out.println("= " + (first / second)); >if (operator.equals("+")) < System.out.println("= " + (first + second)); >if (operator.equals("-")) < System.out.println(" "; String str2 = ""; String operator = ""; char charTmp = ' '; int count = 0; int countFirsDigit = 0; int countSecondDigit= 0; double x = 0; double y = 0; while (count < ch.length - 1)< char c = ch[countFirsDigit]; if(Character.isDigit(c))else < countSecondDigit++; count = countSecondDigit; charTmp = c;//определяем оператор operator = Character.toString(charTmp); char c2 = ch[countSecondDigit]; if(Character.isDigit(c2))< String strTmp = Character.toString(c2); str2 = str2.concat(strTmp); y = Double.parseDouble(str2); >> > if (operator.equals("*")) < System.out.println("= " + (x * y)); >if (operator.equals("/")) < System.out.println("= " + (x / y)); >if (operator.equals("+")) < System.out.println("= " + (x + y)); >if (operator.equals("-")) < System.out.println(" mt24 mb12">
    javaкалькулятор
)" data-controller="se-share-sheet" data-se-share-sheet-title="Поделиться ссылкой на вопрос" data-se-share-sheet-subtitle="" data-se-share-sheet-post-type="question" data-se-share-sheet-social="facebook twitter " data-se-share-sheet-location="1" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f3.0%2f" data-se-share-sheet-license-name="CC BY-SA 3.0" data-s-popover-placement="bottom-start">Поделиться
)" title="">Улучшить вопрос
)">изменён 26 окт 2015 в 12:16
Nicolas Chabanovsky
51.4k87 золотых знаков267 серебряных знаков505 бронзовых знаков
задан 25 окт 2015 в 16:07
1
    Если вам дан исчерпывающий ответ, отметьте его как верный (галка напротив выбранного ответа).
    – Nicolas Chabanovsky
    26 окт 2015 в 12:16
Добавить комментарий|

1 ответ 1

Сброс на вариант по умолчанию
4

Массив args в методе main(. ) содержит параметры командной строки, передаваемые программе при запуске.

Все что вам нужно - взять их оттуда по порядку и преобразовать к нужным типам.

first = Double.parseDouble(args[0]); operator = args[1]; second = Double.parseDouble(args[2]);

Отслеживать

51.4k 87 87 золотых знаков 267 267 серебряных знаков 505 505 бронзовых знаков

ответ дан 25 окт 2015 в 16:21

34.6k 15 15 золотых знаков 66 66 серебряных знаков 95 95 бронзовых знаков

Спасибо, помогло. Единственное, что не срабатывает команда "*". Подскажите что почитать на данную тему. Спапсибо

25 окт 2015 в 17:32

Да, с * будут проблемы - это спецсимвол интерпретатора командной строки. Можете попробовать передавать все выражение одним параметром, взяв его в кавычки java -jar calculator.jar "3 + 7" , потом вытаскивать его из args[0] и разбивать на части самостоятельно.

Как написать калькулятор в стиле ООП?

Нужно написать простейший калькулятор в стиле ООП. Это учебная задачка и хочу задаться вопросом, правильно ли я написал свой код? Хотелось бы по меньше процедурного кода. Сделал реализацию, но не нравится формат кода.

import java.util.Scanner; public class Calculator < private final int precision; public Calculator(int precision) < this.precision = precision; >public double add(double a, double b) < return a + b; >public double subtract(double a, double b) < return a - b; >public double multiply(double a, double b) < double result = a * b; double scale = Math.pow(10.0, precision); return Math.round(result * scale) / scale; >public double div(double a, double b) < double result = a / b; if (b == 0) < return result; >else < double scale = Math.pow(10.0, precision); return Math.round(result * scale) / scale; >> public void calculateNumbers() < Scanner scanner = new Scanner(System.in); Calculator calculator = new Calculator(2); System.out.println("Enter the first number: "); double inputFirstNumber = scanner.nextDouble(); System.out.println("Enter the second number: "); double inputSecondNumber = scanner.nextDouble(); System.out.println("Enter operator (+, -, *, /):"); char operation = scanner.next().charAt(0); while (true)< switch (operation)< case '+': System.out.println("Result: " + calculator.add(inputFirstNumber, inputSecondNumber)); break; case '-': System.out.println("Result: " + calculator.subtract(inputFirstNumber, inputSecondNumber)); break; case '*': System.out.println("Result: " + calculator.multiply(inputFirstNumber, inputSecondNumber)); break; case '/': System.out.println("Result: " + calculator.div(inputFirstNumber, inputSecondNumber)); break; default: System.out.println("Not a correct character"); >System.out.println("Do you want to continue? (Y/N)"); > > >
public class Application < public static void main(String[] args) < Calculator calculator = new Calculator(2); calculator.calculateNumbers(); >>
  • Вопрос задан более двух лет назад
  • 2993 просмотра

1 комментарий

Простой 1 комментарий

Saboteur @saboteur_kiev

неправильно
У вас CalculateNumbers что делает? Считает? нет, оно запрашивает данные у пользователя, затем парсит, затем выводит на экран.
А возможно это должен быть отдельный публичный метод - распарсить полученную от пользователя строку, и тогда к вашему калькулятору можно было бы обращаться из другого объекта, который мог, например, быть не консольню со scanner, а GUI-шным, или сделать их несколько.
ООП сложно учить на калькуляторах. ООП был придуман для того, чтобы упростить написание больших проектов несколькими программистами. На маленьких задачах не всегда понятно зачем и что делить на объекты.

Решения вопроса 1

leahch

3Д специалист. Долго, Дорого, Дерьмово.

Изучите шаблон builder - https://habr.com/ru/post/244521/
Изучите шаблон chain of responsibility и command https://habr.com/ru/post/538954/
Совместите все вместе и получите калькулятор.

Ответ написан более двух лет назад
Нравится 2 10 комментариев
Amir Kenesbay @Amir1807 Автор вопроса
Прочитал про шаблон builder, но не понял как это можно применить в моем коде?

leahch

Amir Kenesbay, про остальные два шаблона прочитали?
Amir Kenesbay @Amir1807 Автор вопроса

Алексей Черемисин, Да спасибо, написал кнч без шаблонов, разделил несколько методов в классе Calculator)

leahch

Amir Kenesbay, заработало? Или все напрасно было?
Amir Kenesbay @Amir1807 Автор вопроса

Алексей Черемисин, по позже отправлю код, ну я не сделал по паттернам кнч, но сделал так как до этого писал.

leahch

Amir Kenesbay, Это нормально. Паттерны, они не догма. Иногда на первых порах даже запутывают, некоторые уже устарели. Многое изменилось с введением в яву функциональщины.
Но изучить их нужно, это как основы математики, просто нужно знать, что они есть.

Amir Kenesbay @Amir1807 Автор вопроса

public class Application < public static void main(String[] args) < Calculator calculator = new Calculator(2); Scanner scanner = new Scanner(System.in); while (true) < System.out.println("Enter the first number: "); double number1 = calculator.getNumber(); System.out.println("Enter the second number: "); double number2 = calculator.getNumber(); System.out.println("Enter operator (+, -, *, /):"); char operation = calculator.getOperation(); double result = calculator.calculate(number1, number2, operation); System.out.println("Result: " + result); System.out.println("Do you want to continue? (Y/N)"); String inputChoice = scanner.next(); if (inputChoice.equalsIgnoreCase("N")) < System.out.println("Bye!"); break; >else if (!inputChoice.equalsIgnoreCase("Y")) < break; >> > >
public class Calculator < Scanner scanner = new Scanner(System.in); private final int precision; public Calculator(int precision) < this.precision = precision; >public double add(double a, double b) < return a + b; >public double subtract(double a, double b) < return a - b; >public double multiply(double a, double b) < double result = a * b; double scale = Math.pow(10.0, precision); return Math.round(result * scale) / scale; >public double div(double a, double b) < double result = a / b; if (b == 0) < return result; >else < double scale = Math.pow(10.0, precision); return Math.round(result * scale) / scale; >> public double getNumber() < double num; if (scanner.hasNextDouble()) < num = scanner.nextDouble(); >else < System.out.println("Wrong input"); scanner.next(); num = getNumber(); >return num; > public char getOperation() < char operation; if (scanner.hasNext()) < operation = scanner.next().charAt(0); >else < System.out.println("Wrong input"); scanner.next(); operation = getOperation(); >return operation; > public double calculate(double number1, double number2, char operation) < double result; switch (operation) < case '+': result = add(number1, number2); break; case '-': result = subtract(number1, number2); break; case '*': result = multiply(number1, number2); break; case '/': result = div(number1, number2); break; default: System.out.println("Wrong input"); result = calculate(number1, number2, getOperation()); >return result; > >

Я тут разделил на методы как getOperation getNumber и calculate и еще использовал рекурсию для удобства.

leahch

Amir Kenesbay, ну, можно конечно же и так.
Но можно было бы отделить операции в классы и использовать шаблон Command, использовать отдельный класс типа Context, куда заносить операнды и операции, и применять операцию к конетексту.

Amir Kenesbay @Amir1807 Автор вопроса
Алексей Черемисин, то есть все операции которые занесены в класс Context вызывать в мейн классе?

leahch

Amir Kenesbay, Нет, у вас как минимум три класса Calculator, Context, Operator(причем это желательно интерфейс). В Calculator передаете Context, и передаете один из классов Opetator.
После чего вызываете Calculator.calculate() - В этом методе берете текущий Operator и передаете ему Context, у него же (у Operator) вызываете apply() - получаете результат и отдаете его на retrun Calculator.calculate().
В таком случае можно сделать не только простые операции с двумя операндами, но и сложные - с одним (возведение в степень, корень, плюс/минус значение). Можно также сделать память у калькулятора сменой контекста, откат действий и даже действия со скобками!

Ответы на вопрос 0
Ваш ответ на вопрос

Войдите, чтобы написать ответ

android

  • Android
  • +1 ещё

Как обойти @UnsupportedAppUsage?

  • 1 подписчик
  • 5 часов назад
  • 10 просмотров

Калькулятор на Java с базой лишь в 10 лвл JavaRush (3Kyu задача на CodeWars)

Калькулятор на Java с базой лишь в 10 лвл JavaRush (3Kyu задача на CodeWars) - 1

Очередная статья про мои приключения на CodeWars. На этот реализуем функционал элементарного калькулятора: Create a simple calculator that given a string of operators (), +, -, *, /. У меня за плечами лишь 10+ уровней JavaRush, поэтому код довольно громоздок, но функционирует отлично. Задача как вы могли заметить, с сайта CodeWars . Ее ранг — 3kyu . ссылку могу дать в личке. Вот частичный список методов и процессов, которые мне помогли:

  1. Рекурсия. Процесс, при котором метод вызывает сам себя (впервые его применил:)), в данном случае необходима, чтобы избавиться от скобок.
  2. Методы String 'a trim() , split() , substring() , replace() .
  3. Базовые методы коллекции List .
  4. А также преобразование типов Double в String и назад.

В принципе, этого хватает. Прежде чем перейти к самому коду, расскажу на какие подводные камни я наткнулся. В большинстве своем, это порядок выполнения вычислений, сначала я сделал стандартную схему * > / > + > - , однако понял, что например при вот таком варианте: 12/6 * 32/2 , программа сначала выполнит умножение ( 6*32 ) и все пойдет под откос, так что очередность стала такой: * > / > + > - . Еще через пару часов наткнулся на самый большой камушек — - . В разных позициях и при разных комбинациях он менял ВСЕ . (Тут конечно есть и моя вина, т.к., например: -34 , лежит у меня не в одной ячейке списка, а в двух: в одной, - в другой, 34 ). Из-за этого пришлось прописывать 2 дополнительные логики в вычисления с - , вообщем увидите это в коде. Извиняюсь за излишние комментарии в коде, я хотел максимально раскрыть ход своих мыслей и объяснить, что там вообще происходит.

 import java.util.*; public class Calculator < public static void main(String[] args) < String num = "2 / ( ( 2 + 0 ) * 1 ) - 6"; System.out.println(evaluate(num)); >public static Double evaluate(String expression) < // Этап 1 // На данном этапе преобразуем нашу строку в список строк, через совмещение цикла for-each и метода split(), // также используем метод trim(), чтобы избавиться от пробелов по краям. // Обратите внимание, что каждым вторым элиментом я добавляю " ". Для того, чтобы потом мне было легче работать со строкой ListstrList = new ArrayList<>(); for (String listElement : expression.trim().split(" ")) < strList.add(listElement); strList.add(" "); >strList.remove(strList.size() - 1); // for (String x : strList) System.out.print(x + ""); // System.out.println(); // После того, как дочитаете код до конца, расскоментируйте две верхние строчки // и посмотрите как работает рекрусия // Этап 2 // Производим поиск символа "(" в списке если находим, то преобразуем все символы от '(' до последнего ')' в строку. // Надо быть внимательными и проверить на случай двух контрукций: 1) (()) 2) ()(). // P.S. После получения строки мы используем РЕКУРСИЮ (метод вызывает сам себя). Таким образом будем находить произведение скобок. if (strList.indexOf("(") != -1) < // Если "(" обнаружен, ищем подходящую конструкцию используя цикл. for (int i = strList.indexOf("(") + 1; i < strList.size() - 1; i++) < // // Конструкция 1: первым элиментом, который мы отыскали были вторые "(" String recursion = ""; if (strList.get(i).equals("(")) < for (int j = i; j < strList.lastIndexOf(")"); j++) < recursion += strList.get(j); >// сверху считывали последовательность находящуюся в скобках (()) До lastIndex элемента String test = expression.substring(expression.indexOf("("), expression.lastIndexOf(")") + 1); // test - последовательность как и сверху, но с добавлением скобок по краям // т.к. наш метод evaluate() возвращает Double, мы должны преобразовать результат рекрусии в String; String testRecursion = String.valueOf(evaluate(recursion)); expression = expression.replace(test, testRecursion); // преобразовали нашу строку с использование рекруси. Избавились от первых скобок strList.removeAll(strList); for (String newElement : expression.trim().split(" ")) < strList.add(newElement); strList.add(" "); >// Тут очищаем наш список и сново его заполняем (но уже раскрыв первые скобки) > // Конструкция 2: первым элиментом, который мы отыскали был ")" String recursion2 = ""; if (strList.get(i).equals(")")) < for (int j = strList.indexOf("(") + 1; j < strList.indexOf(")"); j++) < recursion2 += strList.get(j); >String test2 = expression.substring(expression.indexOf("("), expression.lastIndexOf(")") + 1); String testRecursion2 = String.valueOf(evaluate(recursion2)); expression = expression.replace(test2, testRecursion2); for (String newElement : expression.trim().split(" ")) < strList.add(newElement); strList.add(" "); >// Тут повторили тот же алгоритм, что и в первой конструкции > > > // Этап 3 // Заключительный этап на котором мы будем реализовывать сами вычесления (*/-+) // Всю реализацию помещаем в цикл while ( который прекратиться, если все действия будут выполнены (соответственно в списке останется 1 элемент)). // Внимательно посмотрите на порядок операций: 1)/ 2)* 3)- 4)+ // System.out.println(expression + "-------expression-"); // System.out.println(); // создаем очередной список для реализации вычеслений, на этот раз без добавления " ". List stringList2 = new ArrayList<>(); for (String element : expression.trim().split(" ")) < stringList2.add(element); >while (stringList2.size() != 0) < // работаем со списком: глубоком этапе рекрусии обрабатываем: (2+0) // на среднем: 1 * 1 "или вот этой части уравнения "( ( 2 + 0 ) * 1 ) " // Посмтортите сами // for (String x : stringList2) System.out.print(x ); // System.out.println(); // наш Double :) Также стоит обратить внимание, что для получения класса обертки мы используем не // Double.parseDouble() а Double.valueOf() Double result = 0d; // Сами алгоритмы вычеслений, впринципе понятны, поэтому не буду их комментировать. // Однако обратите внимание на очередность, особенно при вычетании (там вместо 1 условия, 3) // Если что в комментариях под постом немного объясню, если кто-нибудь дочитает до сюда и у него будет желание) if (stringList2.indexOf("/") != -1) < int index = stringList2.indexOf("/"); result = Double.valueOf(stringList2.get(index - 1)) / Double.valueOf(stringList2.get(index + 1)); stringList2.add(index - 1, String.valueOf(result)); stringList2.remove(index + 2); stringList2.remove(index + 1); stringList2.remove(index); >else if (stringList2.indexOf("*") != -1) < int index = stringList2.indexOf("*"); result = Double.valueOf(stringList2.get(index - 1)) * Double.valueOf(stringList2.get(index + 1)); stringList2.add(index - 1, String.valueOf(result)); stringList2.remove(index + 2); stringList2.remove(index + 1); stringList2.remove(index); >else if (stringList2.indexOf("-") != -1) < int index = stringList2.indexOf("-"); int lastIndex = stringList2.lastIndexOf("-"); if (index == 0) < result = 0.0 - Double.valueOf(stringList2.get(index + 1)); stringList2.add(0, String.valueOf(result)); stringList2.remove(2); stringList2.remove(1); >else if ((lastIndex-2>0) && (stringList2.get(lastIndex-2).equals("-"))) < result = Double.valueOf(stringList2.get(lastIndex + 1)) + Double.valueOf(stringList2.get(lastIndex - 1)); stringList2.add(lastIndex - 1, String.valueOf(result)); stringList2.remove(lastIndex + 2); stringList2.remove(lastIndex + 1); stringList2.remove(lastIndex); >else < result = Double.valueOf(stringList2.get(index - 1)) - Double.valueOf(stringList2.get(index + 1)); stringList2.add(index - 1, String.valueOf(result)); stringList2.remove(index + 2); stringList2.remove(index + 1); stringList2.remove(index); >> else if (stringList2.indexOf("+") != -1) < int index = stringList2.indexOf("+"); result = Double.valueOf(stringList2.get(index - 1)) + Double.valueOf(stringList2.get(index + 1)); stringList2.add(index - 1, String.valueOf(result)); stringList2.remove(index + 2); stringList2.remove(index + 1); stringList2.remove(index); >// Вот тут все немного коряво. (На всякий случий проверял отсутствие (*/+-)) if ((stringList2.indexOf("*") == -1) && (stringList2.indexOf("/") == -1) && (stringList2.indexOf("+") == -1) && (stringList2.indexOf("-") == -1)) < return result; >> return Double.valueOf(stringList2.get(0)); > > 

Спасибо всем кто прочитал и оставил комментарий) Если есть замечания, а скорее всего они есть, буду рад услышать их)

  • Покорение CodeWars (Решаем задачу 4kyu)
  • Создание "Магического квадрата" в Java

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *