Оцените пожалуйста код

 
 
 
Сообщения:3
Здравствуйте!

Так вышло, что я координально решил сменить профессию, т.с переквалифицироваться.

Изучаю Java с 0

Было дано задание для поступления на курс написать консольный, однострочный калькулятор, который принимает на ввод латинские и римские цифры.
Написал пока только код для приема латинских цифр.

Пытаюсь сделать, что бы при нажатии Enter выводил исключение и закрывался. Но пока что то не получается, какие варианты есть?
Так же прошу проверить на грамотность кода.

код:

public class Calculator {

    public static void main(String[] args) {
    	
    	
        Calculations calc = new Calculations();             
    	calc.getNum();

    }



    }


import java.util.Scanner;

public class Calculations {
	Scanner sc = new Scanner(System.in);
    private static final int FROM = 1;
    private static final int TO = 10;
    private static int a, b, res;
    private static String op;

    	
	public void getNum() {
		
		System.out.println("Введите два числа через пробел со знаком между ними: ");   
		
    	String numCheck = sc.next();
    	
    	/* if (isEmptyString(numCheck)) {
    		System.out.print("Оsfsfsfsf");
    	}
    	*/
    	
    	if (isDigit(numCheck)) {
    		 int value = Integer.parseInt(numCheck);
             if (isInRange(value, FROM, TO)) {
                 a = value;
                 getOp();
                 
             }else {System.out.print("Ошибка, число 1 вне диапазона");
             	    }  
        }else { System.out.print("Вы ввели не правильное число");
        	   }  
    }  
   

    public void getNum2() {
   		String numCheck2 = sc.next();
        if (isDigit(numCheck2)) {
           int value = Integer.parseInt(numCheck2);
            if (isInRange(value, FROM, TO)) {
                b = value;
                sc.close();
                calculate();
               
            } else {System.out.print("Ошибка, число 2 вне диапазона");
            		}      
        }else {System.out.print("Ошибка, вы ввели не число 2");
               }
    }
    
    public void getOp() {
    	
    	    op = sc.next();
    	    getNum2();
    	    		}
    		
    
    

    	private int calculate() {
    		
            if(op.equals("+")) {
            	res = a + b;
            	System.out.println(res);
            }

            else if(op.equals("-")){
        	   res = a - b;
        	   System.out.println(res);
            }
            
            else if(op.equals("*")){
        	   res = a * b;
        	   System.out.println(res);
            }
            else if(op.equals("/")){
        	   res = a / b;
        	   System.out.println(res);
            }
           else {
                System.out.println("Вы ввели не правильный оператор");
            }
			return res;  
    	}

    	
	//Блок проверки чисел
    
 
   /* boolean isEmptyString(String s) {
    	    return s == " " || s.trim().length() == 0;
    	}
    	*/
    	
    boolean isDigit(String s) throws NumberFormatException {
        try {
            Integer.parseInt(s);
            return true;

        } catch (NumberFormatException e) {
            return false;
        }
    }
    
    boolean isInRange(int value, int from, int to) {
        return value >= FROM && value <= TO;
    }
    
}
 
 
Сообщения:163
Касательно того что бы закрывать приложение при помощи исключения - предлагаю подумать еще раз, есть другие более "гуманные" способы общения с пользователем

Quote:
if(op.equals("+")) {
res = a + b;
System.out.println(res);
}


Такой код немного удручающ, так как Вам придется писать очень много спагетти кода. Вот два других способа как обращатся с типами операции

class Scratch {
    public static void main(String[] args) {
        System.out.println("calculate(6, 3, \"+\"); = " + calculate(6, 3, "+"));
        System.out.println("Operation.parse(\"+\").calculate(6, 3); = " + Operation.parse("+").calculate(6, 3));
    }

    private static double calculate(double operand1, double operand2, String operation) {
        switch (operation) {
            case "+":
                return operand1 + operand2;
            case "-":
                return operand1 - operand2;
            case "*":
                return operand1 * operand2;
            case "/":
                return operand1 / operand2;
            default:
                throw new IllegalArgumentException(String.format("operation %s not supported", operation));
        }
    }


    public enum Operation {
        ADDING() {
            @Override
            public double calculate(double operand1, double operand2) {
                return operand1 + operand2;
            }
        }, SUBTRACTING() {
            @Override
            public double calculate(double operand1, double operand2) {
                return operand1 - operand2;
            }
        }, MULTIPLYING() {
            @Override
            public double calculate(double operand1, double operand2) {
                return operand1 * operand2;
            }
        }, DIVISION() {
            @Override
            public double calculate(double operand1, double operand2) {
                return operand1 / operand2;
            }
        };

        public abstract double calculate(double operand1, double operand2);


        public static Operation parse(String operation) {
            switch (operation) {
                case "+":
                    return ADDING;
                case "-":
                    return SUBTRACTING;
                case "*":
                    return MULTIPLYING;
                case "/":
                    return DIVISION;
                default:
                    throw new IllegalArgumentException(String.format("operation %s not supported", operation));
            }
        }

    }


}

Поучаствую в интересном проекте в роли java дева - направление проекта не имеет значения.
 
 
Сообщения:3
nazymko:

Такой код немного удручающ, так как Вам придется писать очень много спагетти кода. Вот два других способа как обращатся с типами операции



Спасибо, обдумаю!
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет