votako

JackJava

Apr 2nd, 2014
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.72 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. import java.io.IOException;
  4.  
  5. public class Calc {
  6. BufferedReader in; // буферизованный читатель строки из некоего потока (необязательно System.in)
  7. public Calc(InputStreamReader isr) {//конструктор
  8. in = new BufferedReader(isr); //создаем буфчитателя вокруг переданного потока-читателя
  9. }
  10. public void run() {// основной метод класса
  11. double valueOne = 0, valueTwo = 0; // значения в выражении
  12. char op = ' '; //знак операции. Присвоения сделаны чтобы компилятор не ругался
  13. int state = 0; // 0 - читаем первое число, 1 - знак операции, 2 - второе число
  14. String str; // строка из потока
  15. try {
  16. // в цикле читаем строку, одновременно проверяем, что поток не кончился (!= null)
  17. // одновременно проверяем, что строка не пустая (условие выхода из цикла)
  18. while((str = in.readLine()) != null && !str.equals("")) {
  19. switch (state) { // в зависимости от состояния
  20. case 0: // если состояние "читаем первое число"
  21. valueOne = Double.parseDouble(str); // читаем
  22. state = 1; // переключаем в состояние "читаем операцию"
  23. break;
  24. case 1: //состояние "читаем операцию"
  25. op = str.charAt(0);
  26. state = 2; // переключаем в состояние "читаем второе число"
  27. break;
  28. case 2:
  29. valueTwo = Double.parseDouble(str); // разбор второго числа
  30. // к этому моменту мы прочитали оба числа и его операцию
  31. switch (op) { // выбираем нужное действие, выводим результат
  32. case '+':
  33. System.out.println(valueOne + valueTwo);
  34. break;
  35. case '-':
  36. System.out.println(valueOne - valueTwo);
  37. break;
  38. case '*':
  39. System.out.println(valueOne * valueTwo);
  40. break;
  41. case '/':
  42. System.out.println(valueOne / valueTwo);
  43. break;
  44. }
  45. state = 0; // после печати, снова переключаемся в режим "читаем первое число"
  46. }
  47. }
  48. } catch (IOException e) {
  49. e.printStackTrace();
  50. }
  51. }
  52.  
  53. public static void main(String[] args) { // входная точка
  54. // создаем объект Calc, передаем ему читателя вокруг system.in
  55. // и тут же запускаем цикл чтения/печати
  56. new Calc(new InputStreamReader(System.in)).run();
  57. }
  58. }
Advertisement
Add Comment
Please, Sign In to add comment