Saad K Ответов: 0

Как определить, содержит ли строка другой оператор?


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; //игнорировать первый цикл. => Теперь вы должны добавить проверку, чтобы не позволить пользователю вставить оператор в первый элемент !
}
В противном случае вы получите ошибку, когда оператор будет вставлен в начало.
Наконец, ваша работа кажется интересной, но вы должны создавать методы вместо того, чтобы писать свой код в основном, попробуйте организовать, и ваш код будет намного понятнее и легче модифицировать и поддерживать.

0 Ответов