1

Тема: Коментарі до програми калькулятора

Доброго дня,

створив програму калькулятор. Так як це друга моя програма в житті, прошу більш досвідчених подивитись на код і  дати кілька (або багато ))) своїх коментарів щодо нього. Підозрюю що код дещо незграбний, але з чогось треба починати.
Ось код

package mynewcalc;



import javafx.application.*;
import javafx.event.ActionEvent;
import javafx.scene.*;
import javafx.scene.text.Font;
import javafx.stage.*;
import javafx.scene.layout.*;
import javafx.scene.control.*;
import javafx.geometry.*;
import javafx.scene.input.KeyCode;


public class MyNewCalc extends Application {

    Button btnPlus;
    Button btnMinus;
    Button btnDiv;
    Button btnMult;
    Button btnEquv;
    Button btnC;
    Button btnMemPlus;
    Button btnMemMin;
    Button btnMemR;
    Button btnMemC;
    Button btnComma;
    Button btnBSpace;
    Button btnSqRoot;
    Button btnPlusMin;
    Button btn1;
    Button btn2;
    Button btn3;
    Button btn4;
    Button btn5;
    Button btn6;
    Button btn7;
    Button btn8;
    Button btn9;
    Button btn0;
    Button btnPerc;

    Label tf = LabelBuilder.create()
            .text("0")
            .prefWidth(190)
            .prefHeight(50)
            .alignment(Pos.BOTTOM_RIGHT)
            .build();
    Label mem;
    static String str = "0";
    static Double num1 = 0.0;
    static Double num2 = 0.0;
    static char oper = ' ';
    static boolean newNum = true;
    static Double numMem = null;
    static boolean eqvFlag = false;

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage myStage) {
        myStage.setTitle("Mulyak Calc");

        FlowPane rootNode = new FlowPane(Orientation.VERTICAL, 10, 10);
        myStage.setResizable(false);
        Scene myScene = new Scene(rootNode, 210, 290);

        GridPane numPane = new GridPane();
        GridPane scrPane = new GridPane();

        rootNode.setAlignment(Pos.TOP_CENTER);
        numPane.setAlignment(Pos.BOTTOM_CENTER);

        numPane.setHgap(3);
        numPane.setVgap(3);

        myStage.setScene(myScene);

        btnPlus = new Button("+");
        btnMinus = new Button("-");
        btnDiv = new Button("/");
        btnMult = new Button("*");
        btnEquv = new Button("=");
        btnC = new Button("C");
        btnMemPlus = new Button("M+");
        btnMemMin = new Button("M-");
        btnMemR = new Button("MR");
        btnMemC = new Button("MC");
        btnComma = new Button(",");
        btnBSpace = new Button("<-");
        btnSqRoot = new Button("Sq Root");
        btnPlusMin = new Button("+-");
        btn1 = new Button("1");
        btn2 = new Button("2");
        btn3 = new Button("3");
        btn4 = new Button("4");
        btn5 = new Button("5");
        btn6 = new Button("6");
        btn7 = new Button("7");
        btn8 = new Button("8");
        btn9 = new Button("9");
        btn0 = new Button("0");
        btnPerc = new Button("%");
        
        mem = new Label ();

        scrPane.setPadding(new Insets(10, 10, 10, 10));
        tf.setStyle("-fx-background-color: lightblue; -fx-border-color: black;");
        btnSqRoot.setWrapText(true);
        btnSqRoot.setFont(new Font("Arial", 8));

        btnPlus.setPrefSize(35.0, 30.0);
        btnMinus.setPrefSize(35.0, 30.0);
        btnDiv.setPrefSize(35.0, 30.0);
        btnMult.setPrefSize(35.0, 30.0);
        btnEquv.setPrefSize(35.0, 30.0);
        btnC.setPrefSize(35.0, 30.0);
        btnMemPlus.setPrefSize(35.0, 30.0);
        btnMemMin.setPrefSize(35.0, 30.0);
        btnMemR.setPrefSize(35.0, 30.0);
        btnMemC.setPrefSize(35.0, 30.0);
        btnComma.setPrefSize(35.0, 30.0);
        btnBSpace.setPrefSize(35.0, 30.0);
        btnSqRoot.setPrefSize(35.0, 30.0);
        btnPlusMin.setPrefSize(35.0, 30.0);
        btn1.setPrefSize(35.0, 30.0);
        btn2.setPrefSize(35.0, 30.0);
        btn3.setPrefSize(35.0, 30.0);
        btn4.setPrefSize(35.0, 30.0);
        btn5.setPrefSize(35.0, 30.0);
        btn6.setPrefSize(35.0, 30.0);
        btn7.setPrefSize(35.0, 30.0);
        btn8.setPrefSize(35.0, 30.0);
        btn9.setPrefSize(35.0, 30.0);
        btn0.setPrefSize(35.0, 30.0);
        btnPerc.setPrefSize(35.0, 30.0);
        tf.setPrefSize(190.0, 50.0);

        GridPane.setConstraints(btnPlus, 2, 5);
        GridPane.setConstraints(btnMinus, 3, 4);
        GridPane.setConstraints(btnDiv, 3, 2);
        GridPane.setConstraints(btnMult, 3, 3);
        GridPane.setConstraints(btnEquv, 3, 5);
        GridPane.setConstraints(btnC, 4, 2);
        GridPane.setConstraints(btnMemPlus, 3, 1);
        GridPane.setConstraints(btnMemMin, 2, 1);
        GridPane.setConstraints(btnMemR, 1, 1);
        GridPane.setConstraints(btnMemC, 0, 1);
        GridPane.setConstraints(btnComma, 1, 5);
        GridPane.setConstraints(btnBSpace, 4, 1);
        GridPane.setConstraints(btnSqRoot, 4, 5);
        GridPane.setConstraints(btnPlusMin, 4, 4);
        GridPane.setConstraints(btn1, 0, 4);
        GridPane.setConstraints(btn2, 1, 4);
        GridPane.setConstraints(btn3, 2, 4);
        GridPane.setConstraints(btn4, 0, 3);
        GridPane.setConstraints(btn5, 1, 3);
        GridPane.setConstraints(btn6, 2, 3);
        GridPane.setConstraints(btn7, 0, 2);
        GridPane.setConstraints(btn8, 1, 2);
        GridPane.setConstraints(btn9, 2, 2);
        GridPane.setConstraints(btn0, 0, 5);
        GridPane.setConstraints(btnPerc, 4, 3);
        GridPane.setConstraints(mem,0,0);

        btn0.setOnKeyPressed((ke) -> {
            if (ke.getCode() == KeyCode.DIGIT0) {
                
                btn0.fireEvent(new ActionEvent());
            }
        });

        btn0.setOnAction((ae) -> {

            if (newNum) {
                
                newNum = false;
                str = "0";
                tf.setText(str);
            } else {
                if (!str.equals("0")) {
                    
                    str = str.concat("0");
                    tf.setText(str);
                }
            }

        });

        btn1.setOnAction((ae) -> {

            if (newNum) {
                newNum = false;
                str = "1";
                tf.setText(str);
            } else {
                if (!str.equals("0")) {
                    str = str.concat("1");
                    tf.setText(str);
                } else {
                    str = "1";
                    tf.setText(str);
                }
            }

        });

        btn2.setOnAction(
                (ae) -> {

                    if (newNum) {
                        newNum = false;
                        str = "2";
                        tf.setText(str);
                    } else {
                        if (!str.equals("0")) {
                            str = str.concat("2");
                            tf.setText(str);
                        } else {
                            str = "2";
                            tf.setText(str);
                        }
                    }

                }
        );
        btn3.setOnAction(
                (ae) -> {

                    if (newNum) {
                        newNum = false;
                        str = "3";
                        tf.setText(str);
                    } else {
                        if (!str.equals("0")) {
                            str = str.concat("3");
                            tf.setText(str);
                        } else {
                            str = "3";
                            tf.setText(str);
                        }
                    }

                }
        );

        btn4.setOnAction(
                (ae) -> {

                    if (newNum) {
                        newNum = false;
                        str = "4";
                        tf.setText(str);
                    } else {
                        if (!str.equals("0")) {
                            str = str.concat("4");
                            tf.setText(str);
                        } else {
                            str = "4";
                            tf.setText(str);
                        }
                    }

                }
        );
        btn5.setOnAction(
                (ae) -> {

                    if (newNum) {
                        newNum = false;
                        str = "5";
                        tf.setText(str);
                    } else {
                        if (!str.equals("0")) {
                            str = str.concat("5");
                            tf.setText(str);
                        } else {
                            str = "5";
                            tf.setText(str);
                        }
                    }

                }
        );

        btn6.setOnAction(
                (ae) -> {

                    if (newNum) {
                        newNum = false;
                        str = "6";
                        tf.setText(str);
                    } else {
                        if (!str.equals("0")) {
                            str = str.concat("6");
                            tf.setText(str);
                        } else {
                            str = "6";
                            tf.setText(str);
                        }
                    }

                }
        );

        btn7.setOnAction(
                (ae) -> {

                    if (newNum) {
                        newNum = false;
                        str = "7";
                        tf.setText(str);
                    } else {
                        if (!str.equals("0")) {
                            str = str.concat("7");
                            tf.setText(str);
                        } else {
                            str = "7";
                            tf.setText(str);
                        }
                    }

                }
        );

        btn8.setOnAction(
                (ae) -> {

                    if (newNum) {
                        newNum = false;
                        str = "8";
                        tf.setText(str);
                    } else {
                        if (!str.equals("0")) {
                            str = str.concat("8");
                            tf.setText(str);
                        } else {
                            str = "8";
                            tf.setText(str);
                        }
                    }

                }
        );

        btn9.setOnAction(
                (ae) -> {

                    if (newNum) {
                        newNum = false;
                        str = "9";
                        tf.setText(str);
                    } else {
                        if (!str.equals("0")) {
                            str = str.concat("9");
                            tf.setText(str);
                        } else {
                            str = "9";
                            tf.setText(str);
                        }
                    }

                }
        );

        btnMinus.setOnAction(
                (ae) -> {
                    eqvFlag = false;
                    if (newNum) {
                        if ((num1 != null) & (oper != ' ') & (num2 != null)) {

                            calculate(num1, num2, oper);
                            oper = '-';
                            tf.setText(str);
                        } else {

                            setNum1(str);
                            oper = '-';
                        }
                    } else {
                        newNum = true;

                        if (num1 == null) {

                            setNum1(str);
                            oper = '-';
                            tf.setText(str);
                        } else {

                            calculate(num1, Double.parseDouble(str), oper);
                            oper = '-';
                            tf.setText(str);
                        }
                    }

                }
        );
        btnPlus.setOnAction(
                (ae) -> {
                    eqvFlag = false;
                    if (newNum) {
                        if ((num1 != 0.0) & (oper != ' ') & (num2 != 0.0)) {
                            calculate(num1, num2, oper);
                            oper = '+';
                            tf.setText(str);
                        } else {
                            setNum1(str);
                            oper = '+';
                        }
                    } else {
                        newNum = true;

                        if (num1 == 0.0) {
                            setNum1(str);
                            oper = '+';
                            tf.setText(str);
                        } else {
                            calculate(num1, Double.parseDouble(str), oper);
                            oper = '+';
                            tf.setText(str);
                        }
                    }
                }
        );
        btnDiv.setOnAction(
                (ae) -> {
                    eqvFlag = false;
                    if (newNum) {
                        if ((num1 != 0.0) & (oper != ' ') & (num2 != 0.0)) {
                            calculate(num1, num2, oper);
                            oper = '/';
                            tf.setText(str);
                        } else {
                            setNum1(str);
                            oper = '/';
                        }

                    } else {
                        newNum = true;

                        if (num1 == 0.0) {
                            setNum1(str);
                            oper = '/';
                            tf.setText(str);
                        } else {
                            setNum2(str);
                            calculate(num1, Double.parseDouble(str), oper);
                            oper = '/';
                            tf.setText(str);
                        }
                    }
                }
        );

        btnMult.setOnAction(
                (ae) -> {
                    eqvFlag = false;
                    if (newNum) {
                        if ((num1 != 0.0) & (oper != ' ') & (num2 != 0.0)) {
                            calculate(num1, num2, oper);
                            oper = '*';
                            tf.setText(str);
                        } else {
                            setNum1(str);
                            oper = '*';
                        }

                    } else {
                        newNum = true;

                        if (num1 == 0.0) {
                            setNum1(str);
                            oper = '*';
                            tf.setText(str);
                        } else {
                            calculate(num1, Double.parseDouble(str), oper);
                            oper = '*';
                            tf.setText(str);
                        }
                    }
                }
        );
        btnPerc.setOnAction(
                (ae) -> {
                    eqvFlag = false;
                    if (newNum) {
                        setNum1(str);
                        oper = '%';

                    } else {
                        newNum = true;

                        if (num1 == 0.0) {
                            setNum1(str);
                            oper = '%';
                            tf.setText(str);
                        } else {
                            calculate(num1, Double.parseDouble(str), oper);
                            oper = '%';
                            tf.setText(str);
                        }
                    }
                }
        );
        btnSqRoot.setOnAction(
                (ae) -> {
                    eqvFlag = false;
                    if (newNum) {
                        if (num1 == 0.0) {
                            // Випадок коли намагаються вирахувати кв корінь із "0".  
                            // Можливо краще нічого не виводити
                            setNum1(str);
                            calculateUno(num1, 'S');
                            tf.setText(str);
                        } else {
                            // Цей випадок очевидно не можливий
                            Double n2 = Math.sqrt(Double.parseDouble(str));
                            str = n2.toString();
                            tf.setText(str);
                        }
                    } else {
                        newNum = true;

                        if (num1 == 0.0) {
                            setNum1(str);
                            calculateUno(num1, 'S');
                            tf.setText(str);
                        } else {
                            num2 = Math.sqrt(Double.parseDouble(str));
                            str = num2.toString();
                            tf.setText(str);
                        }
                    }

                }
        );
        btnPlusMin.setOnAction(
                (ae) -> {
                    eqvFlag = false;
                    if (newNum) {
                        if (num1 == 0.0) {
                            // Випадок коли намагаються вирахувати обернене із "0".  
                            // Можливо краще нічого не виводити
                            setNum1(str);
                            calculateUno(num1, 'M');
                            tf.setText(str);
                        } else {
                            // Цей випадок очевидно не можливий
                            num2 = Double.parseDouble(str) * -1;
                            str = num2.toString();
                            tf.setText(str);
                        }
                    } else {
                        newNum = true;

                        if (num1 == 0.0) {
                            setNum1(str);
                            calculateUno(num1, 'M');
                            tf.setText(str);
                        } else {
                            num2 = Double.parseDouble(str) * -1;
                            str = num2.toString();
                            tf.setText(str);
                        }
                    }

                }
        );
        btnC.setOnAction(
                (ae) -> {
                    eqvFlag = false;
                    str = "0";
                    newNum = true;
                    num1 = 0.0;
                    num2 = 0.0;
                    tf.setText(str);
                }
        );

        btnComma.setOnAction(
                (ae) -> {

                    CharSequence dot = ".";
                    if (!str.contains(dot)) {
                        eqvFlag = false;
                        newNum = false;
                        str = str.concat(".");
                        tf.setText(str);
                    }

                }
        );

        btnBSpace.setOnAction(
                (ae) -> {
                    if (eqvFlag == false & newNum == false) {

                        if (str.length() > 1 & !str.equals("-0")) {

                            str = str.substring(0, str.length() - 1);
                            tf.setText(str);
                        } else {
                            newNum = true;
                            if (num1 != 0.0) {
                                str = "0";
                                tf.setText(str);
                            } else {
                                
                                str = "0";
                                tf.setText(str);
                            }
                        }
                    }

                }
        );
        btnEquv.setOnAction(
                (ae) -> {
                    eqvFlag = true;
                    if (newNum) {
                        if ((num1 != 0.0) & (oper != ' ') & (num2 != 0.0)) {
                            calculate(num1, num2, oper);
                            oper = ' ';
                            tf.setText(str);
                        } else {
                            setNum1(str);
                            oper = ' ';
                        }
                    } else {
                        newNum = true;

                        if (num1 == 0.0) {
                            setNum1(str);
                            oper = ' ';
                            tf.setText(str);
                        } else {
                            calculate(num1, Double.parseDouble(str), oper);
                            oper = ' ';
                            tf.setText(str);
                        }
                    }

                }
        );

        btnMemMin.setOnAction(
                (ae) -> {

                    try {
                        newNum = true;
                        mem.setText("M-");

                        if (numMem == null) {
                            numMem = Double.parseDouble(str);
                        } else {
                            numMem -= Double.parseDouble(str);
                        }
                    } catch (NumberFormatException nfe) {
                        str = "Is Not a Num";
                        tf.setText(str);
                    }

                }
        );
        btnMemPlus.setOnAction(
                (ae) -> {
                    try {
                        newNum = true;
                        mem.setText("M+");

                        if (numMem == null) {
                            numMem = Double.parseDouble(str);
                        } else {
                            numMem += Double.parseDouble(str);
                        }
                    } catch (NumberFormatException nfe) {
                        str = "Is Not a Num";
                        tf.setText(str);
                    }

                }
        );
        btnMemC.setOnAction(
                (ae) -> {
                    numMem = null;
                    mem.setText("");
                }
        );

        btnMemR.setOnAction(
                (ae) -> {
                    eqvFlag = false;
                    if (numMem != null) {
                        str = numMem.toString();
                        newNum = true;
                        
                        tf.setText(str);
                    }
                }
        );

        tf.setFont(
                new Font(35.0));
        tf.setOpacity(
                1.0);

        numPane.getChildren()
                .addAll(
                        mem,btnC,
                        btnMemPlus,
                        btnMemMin,
                        btnMemR,
                        btnMemC,
                        btnPlus, btnMinus, btnDiv, btnMult, btnEquv, btnBSpace,
                        btnSqRoot,
                        btnPlusMin, btnPerc,
                        btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn0,
                        btnComma
                );

        scrPane.getChildren()
                .add(tf);

        rootNode.getChildren()
                .addAll(scrPane, numPane);

        myStage.show();
    }

    static Double setNum1(String st) {
        num1 = Double.parseDouble(st);
        return num1;
    }

    static Double setNum2(String st) {
        num2 = Double.parseDouble(st);
        return num2;
    }

    public static Double calculate(Double n1, Double n2, char op) {

        Double nom1 = n1;
        Double nom2 = n2;

        switch (op) {
            case ('+'):
                num1 = n1 + n2;
                str = num1.toString();
                break;
            case ('-'):
                num1 = n1 - n2;
                str = num1.toString();
                break;
            case ('*'):
                num1 = n1 * n2;
                str = num1.toString();
                break;
            case ('/'):
                if (n2 != 0) {
                    num1 = n1 / n2;
                    str = num1.toString();
                    break;
                } else {
                    str = "Div by 0 operation";
                    newNum = true;
                    num1 = 0.0;
                    num2 = 0.0;
                    oper = ' ';
                    break;
                }

            case ('%'):
                num1 = n1 / 100 * n2;
                str = num1.toString();
                break;
            case ('S'):
                num1 = Math.sqrt(n1);
                str = num1.toString();
                break;
        }
        return num1;
    }

    public static Double calculateUno(Double n1, char op) {

        Double nom1 = n1;

        switch (op) {

            case ('S'):
                num1 = Math.sqrt(n1);
                str = num1.toString();
                break;
            case ('M'):
                num1 = -n1;
                str = num1.toString();
                break;
        }
        return num1;
    }
}

2

Re: Коментарі до програми калькулятора

Крім того ще питання - в процесі зборки цього проекту НетБінз видав папередження, що в ньому використані деякі застарілі елементи коду (deprecated). Які саме це елементи можуть бути?

Буду дуже вдячний за будь-яку допомогу.

3

Re: Коментарі до програми калькулятора

Майже всі попрередження, видані компіляторами, містять номера рядків.

4 Востаннє редагувалося AM (10.01.2015 02:11:01)

Re: Коментарі до програми калькулятора

Ось що видає нетбінз при генерації джар файлу

Compiling 1 source file to C:\Users\Андрій\Google Диск\JavaNB\MyNewCalc\build\classes
Note: C:\Users\Андрій\Google Диск\JavaNB\MyNewCalc\src\mynewcalc\MyNewCalc.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
compile:
Created dir: C:\Users\Андрій\Google Диск\JavaNB\MyNewCalc\dist
Copying 1 file to C:\Users\Андрій\Google Диск\JavaNB\MyNewCalc\build
Nothing to copy.
Building jar: C:\Users\Андрій\Google Диск\JavaNB\MyNewCalc\dist\MyNewCalc.jar

Але джар генерується і загалом працює (правда всі функції не перевіряв)

5

Re: Коментарі до програми калькулятора

Deprecated — ще не removed. Це просто рекомендація розробника, що не треба використовувати ось цей застарілий клас чи метод, коли в нових версіях є якийсь кращий варіант. Хоча deprecated-функціонал у джаві продовжує роками підтримуватись, тому й видається лише попередження, що клас застарів, а не помилка, що такого класу нема.