Skip to content

Instantly share code, notes, and snippets.

@redento
Created November 18, 2016 14:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save redento/25b6fd2784e9192e035f6f463a6634e3 to your computer and use it in GitHub Desktop.
Save redento/25b6fd2784e9192e035f6f463a6634e3 to your computer and use it in GitHub Desktop.
package Beginner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringJoiner;
import static Beginner.ReplaceFizzBuzz.j;
public class Calculator {
static ArrayList mem = new ArrayList();
static BufferedReader inc = new BufferedReader(new InputStreamReader(System.in));
static String ravno = "=";
static double resl = 0;
public static Double parsing() throws IOException {
try {
System.out.println("Введите число:");
String j = new String(inc.readLine());
String lower = j.toLowerCase(); //Переводим строку в нижний регистр
if (j.equals("=")) { //Если сразу ввели = сообщаем что это не в тему сейчас
System.out.println("Сразу равно? Введите число еще раз!");
return parsing();
} else if (lower.equals("число")) { //если пользователь ввел "Число" буквами, сообщаем что он клоун
System.out.println("А вы шутник сэр! Введите число еще раз");
return parsing();
} else {
resl = Double.parseDouble(j);
}
} catch (NumberFormatException e) { //если пользователь ввел недопустимый символ, строку, обрабатываем это исключение
System.out.println("Сэр, я не понимаю что вы пишите!? Введите число еще раз!");
return parsing();
}
return resl;
} //Метод первой инициализации
static public void SysMess() throws InterruptedException {
System.out.println("Здравствуйте!!! Я мистер Кальконс, приступим к расчетам...");
Thread.sleep(500);
System.out.println("-> Для получения результата введите: '='");
System.out.println("-> Чтобы узнать процент от числа введите: '%' Пример 60 % 100 = 60");
System.out.println("-> Чтобы я запомнил результат, в поле (Введите знак) введите ++. Я могу помнить только 10 чисел.");
System.out.println("-> Чтобы посмотреть что хранится в моей памяти, в поле (Введите знак) введите +++");
System.out.println("-> Чтобы стереть мою память, в поле (Введите знак) введите -- (два минуса).");
} //Системные сообщения перед запуском программы
static Double plus () throws IOException {
System.out.println("Введите число:");
try {
String f = new String(inc.readLine());
String lower = f.toLowerCase();
if (lower.equals("=")) {
System.out.println("Результат: "+resl);
System.out.println("Сэр вы хотите считать еще? Y да N нет");
String yn = new String(inc.readLine());
String low = yn.toLowerCase();
if (low.equals("y")|low.equals("yes")|low.equals("да")){
return parsing();
}else if (yn.equals("n")) {
System.exit(0);
} else {
System.out.println("Я вас не понимаю сэр. До скорой встречи!");
System.exit(0);
}
}
resl = resl + Double.parseDouble(f);
} catch (NumberFormatException e) {
System.out.println("Вы ввели не число, будьте внимательнее!");
return plus();
}
return resl;
} //Обработка операции + плюс
static Double minus () throws IOException{
System.out.println("Введите число:");
try {
String f = inc.readLine();
if (f.equals("=")) {
System.out.println("Результат: "+resl);
System.out.println("Сэр вы хотите считать еще? Y да N нет");
String yn = inc.readLine();
String low = yn.toLowerCase();
if (low.equals("y")|low.equals("yes")|low.equals("да")){
return parsing();
}else if (yn.equals("n")) {
System.exit(0);
} else {
System.out.println("Я вас не понимаю сэр. До скорой встречи!");
System.exit(0);
}
}
resl = resl - Double.parseDouble(f);
} catch (NumberFormatException e) {
System.out.println("Вы ввели не число, будьте внимательнее!");
return minus();
}
return resl;
} //Обработка операции = минус
static Double umnojit () throws IOException{
System.out.println("Введите число:");
try {
if (resl == 0) {
System.out.println("Сэр вы собираетесь умножить 0 на число!");
}
String f = inc.readLine();
if (f.equals("=")) {
System.out.println("Результат: "+resl);
System.out.println("Сэр вы хотите считать еще? Y да N нет");
String yn = inc.readLine();
String low = yn.toLowerCase();
if (low.equals("y")|low.equals("yes")|low.equals("да")){
return parsing();
}else if (yn.equals("n")) {
System.exit(0);
} else {
System.out.println("Я вас не понимаю сэр. До скорой встречи!");
System.exit(0);
}
}
double um = Double.parseDouble(f);
resl = resl * um;
} catch (NumberFormatException e) {
System.out.println("Вы ввели не число, будьте внимательнее!");
return umnojit();
}
return resl;
}//Обработка операции * умножить
static Double delenie() throws IOException{
System.out.println("Введите число:");
try {
String f = inc.readLine();
if (f.equals("=")) {
System.out.println(resl);
System.out.println("Сэр вы хотите считать еще? Y да N нет");
String yn = inc.readLine();
String low = yn.toLowerCase();
if (low.equals("y")|low.equals("yes")|low.equals("да")){
return parsing();
}else if (yn.equals("n")) {
System.exit(0);
} else {
System.out.println("Я вас не понимаю сэр. До скорой встречи!");
System.exit(0);
}
} else if (f.equals("0")) {
System.out.println("Вы пытаетесь делить на 0!");
return delenie();
}
resl = resl / Double.parseDouble(f);
} catch (NumberFormatException e) {
System.out.println("Вы ввели не число, будьте внимательнее!");
return delenie();
}
return resl;
}//Обработка операции / делить
static Double precent() throws IOException{
System.out.println("Введите число:");
try {
String f = inc.readLine();
if (f.equals("=")) {
System.out.println("Результат: "+resl);
System.out.println("Сэр вы хотите считать еще? Y да N нет");
String yn = inc.readLine();
String low = yn.toLowerCase();
if (low.equals("y")|low.equals("yes")|low.equals("да")){
return parsing();
}else if (yn.equals("n")) {
System.exit(0);
} else {
System.out.println("Я вас не понимаю сэр. До скорой встречи!");
System.exit(0);
}
}
resl = (resl * Double.parseDouble(f)) / 100;
} catch (NumberFormatException e) {
System.out.println("Вы ввели не число, будьте внимательнее!");
return precent();
}
return resl;
}//Обработка операции % процент от числа
static Double pasing2 () throws IOException {
while (ravno.equals("=")) {
System.out.println("Введите знак:");
String zn = inc.readLine();
//пилим ниже..
if (zn.equals("++")){
if(mem.size()>=10){
System.out.println("Я не могу запомнить больше сэр");
}else{
mem.add(resl);
System.out.println("Я запомнил результат сэр! "+resl);
System.out.println("Считаем заново");
parsing();
pasing2();
}
}else if(zn.equals("--")){
if(mem.size()==0){
System.out.println("Я и так ничего не помню сэр!? Что мы тут вобще делаем!?");
System.out.println("Считаем вроде:");
parsing();
pasing2();
}else {
System.out.println("Я забыл ваш результат сэр!");
mem.clear();
System.out.println("Считаем заново:");
parsing();
pasing2();
}
}else if (zn.equals("+++")){
try{
if(mem.size()==0){
System.out.println("Я ничего не помню сэр!");
}else {
System.out.println("Сэр вот числа которые вы прросили меня запомнить: "+mem);}}
catch (IndexOutOfBoundsException e){
System.out.println("Я ничего не помню сэр!");
}
System.out.println("Считаем заново:");
parsing();
pasing2();
}
//пилим выше!
if (zn.equals("=")) {
System.out.println("Результат: "+resl);
System.out.println("Сэр вы хотите считать еще? Y да N нет");
String ynn = inc.readLine(); //Вводим да или нет
String low = ynn.toLowerCase();//форматируем регистр строки в Нижний!
if(low.equals("y")|low.equals("yes")|low.equals("да")){ //если да очищаем результат и начинаем считать все заново
resl = 0; //очищаем результат
parsing(); // вызываем 1ую инициализаию
pasing2();// вызываем 2ую иницаиализацию рекурсивно
}else if(ynn.equals("n")|ynn.equals("no")|ynn.equals("нет")){//если ввел пользователь нет -n- очищаем переменную, которая меня бесит, зачем она бля?
ravno = "";//вот как мне ее заменить на чтонибудь нормальное хз, пока..
}else{ // если пользователь ввел чтото отличное от y,n обижаемся и закрываемся.
System.out.println("Для меня это значит нет! Досвидания сэр!");
ravno =""; //тут мы обиделись и закрылись
}
break;
} else {
switch (zn) {
case "+":
plus();
break;
case "-":
minus();
break;
case "*":
umnojit();
break;
case "/":
delenie();
break;
case "%":
precent();
break;
}
}
}
return resl;
}
public static void main(String[] args) throws IOException, InterruptedException {
SysMess(); // вывод системных сообщений в начале работы программы
parsing(); // метод начального ввода
pasing2(); //метод инициализации
}
}
@MrAIring
Copy link

MrAIring commented Nov 18, 2016

Как уже заметили на stackoverflow ООП как таковое тут отсутствует. Есть большие претензии к стилю, советую почитать (и переодически перечитывать) "Совершенный код" С. Макконелла и "Чистый код" Р. Мартина. Если есть желание пообщаться на тему ООП, то напиши на email, возможно помогу найти куда копать.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment