Как определить, содержит ли строка другой оператор?
public static void main(String[] args) { try { Scanner scanner = new Scanner(System.in); System.out.println("Enter your calculation"); String text = scanner.nextLine(); for(int i = 0; i < text.length();i++) { if(text.substring(i,i+1).equals("+")) { String behind = text.substring(i-i,i); String ahead = text.substring(i+1,text.length()); System.out.println(behind); System.out.println(ahead); } if(text.substring(i,i+1).equals("-")) { String behind = text.substring(i-i,i); String ahead = text.substring(i+1,text.length()); } } } catch(Exception e) { System.out.println(e.getMessage()); main(args); } }
Я делаю калькулятор, который будет принимать много входов и операторов. Как показано выше, код настроен так, что вы можете ввести только два числа, если я запрограммирую его так, чтобы он был проклят для следующего оператора, например 5+7-3, то он будет работать, но если я просто наберу 5+7, то я получу ошибку.
Что я уже пробовал:
if(text.substring(i,i+1).equals("+")) { String behind = text.substring(i-i,i); String ahead = text.substring(i+1,text.indexOf("+")); System.out.println(behind); System.out.println(ahead); } if(text.substring(i,i+1).equals("-")) { String behind = text.substring(i-i,i); String ahead = text.substring(i+1,text.indexOf("-")); }
Если я попробовал это сделать, то у меня будут ошибки, если я наберу два числа после этого. Еще одна вещь, которая меня смущает, - это то, что если следующий оператор-это a+, а не a -, то я не могу использовать метод indexOf ();.
PIEBALDconsult
Я рекомендую изучить алгоритм маневрового двора или просто использовать регулярное выражение.
https://en.wikipedia.org/wiki/Shunting-yard_algorithm
Ziee-M
Привет, у вас есть несколько ошибок, строка позади = text.substring(i-i,i) =>text.substring(i-1,i) в противном случае вы получите много символов вместо 1.
Вы должны сделать обрезку() для вашего основного текста, прежде чем начать работать с ним.
Кроме того, вы должны начать свой анализ с индекса 1, а не с индекса 0 => Вы можете добавить
если(i == 0)
{
continue; //игнорировать первый цикл. => Теперь вы должны добавить проверку, чтобы не позволить пользователю вставить оператор в первый элемент !
}
В противном случае вы получите ошибку, когда оператор будет вставлен в начало.
Наконец, ваша работа кажется интересной, но вы должны создавать методы вместо того, чтобы писать свой код в основном, попробуйте организовать, и ваш код будет намного понятнее и легче модифицировать и поддерживать.