Первая попытка Java на простом калькуляторе (что случилось?)

Main.java (Главный класс)

package com.indie;

import java.util.InputMismatchException;
import java.util.Scanner;

import static com.indie.Operations.*;

public class Main {
    private static double Number1;
    private static double Number2;
    private static double Total;
    private static String Symbol;
    private static boolean noError;
    private static boolean exceptioncaught;
    public static void main(String[] args) throws InterruptedException{
        noError = false;
        while (!noError) {
            exceptioncaught = false;
            while (!exceptioncaught) {
                Scanner scanner = new Scanner(System.in);
                System.out.println("Enter your number:");
                try {
                    Number1 = scanner.nextDouble();
                } catch (InputMismatchException ex) {
                    System.out.println();
                    System.out.println("TypeERROR: You didn't input a vaild number!");
                    exceptioncaught = true;
                    System.out.println();
                    Thread.sleep(3000);
                    break;
                }
             System.out.println("What do you want to do:");
            Symbol = scanner.next();
            if (!Symbol.contains("+") && !Symbol.contains("-") && !Symbol.contains("*") && !Symbol.contains("x") && !Symbol.contains("/") && !Symbol.contains("÷")) {
                System.out.println();
                System.out.println("TypeERROR: You didn't input a valid symbol!");
                exceptioncaught = true;
                System.out.println();
                Thread.sleep(3000);
                break;
                }
                System.out.println("Enter your second number:");
                try {
                    Number1 = scanner.nextDouble();
                } catch (InputMismatchException ex) {
                    System.out.println();
                    System.out.println("TypeERROR: You didn't input a vaild number!");
                    exceptioncaught = true;
                    System.out.println();
                    Thread.sleep(3000);
                    break;
                }
                System.out.println();
                if (Symbol.contains("+")) {
                    Total = Add(Number1, Number2);
                    noError = true;
                    break;
                } else if (Symbol.contains("-")) {
                    Total = Subtract(Number1, Number2);
                    noError = true;
                    break;
                } else if (Symbol.contains("*") || Symbol.contains("x")) {
                    Total = Multiply(Number1, Number2);
                    noError = true;
                    break;
                } else if (Symbol.contains("/") || Symbol.contains("÷")) {
                    Total = Divide(Number1, Number2);
                    noError = true;
                    break;
                }
            }
        }
        System.out.println(String.valueOf(Number1)
                           +Symbol+String.valueOf(Number2) 
                           +" = "+String.valueOf(Total));
    }
}

Operations.java (2-й класс)

package com.indie;

public class Operations {
    public static double Add(double x, double y) { return x+y; }
    public static double Subtract(double x, double y){ return x-y; }
    public static double Multiply(double x, double y){ return x*y; }
    public static double Divide(double x, double y){ return x/y; }
}

Получил этот результат

Как это исправить? Как получилось 2.0 + 20.0 = 2.0? Пожалуйста помоги. Есть ли способ предотвратить такие результаты?

Other results:

result 1:

Enter your number:

2

What do you want to do:

+5

Enter your second number:

56

56.0+50.0=56.0

result 2:

Enter your number:

1

What do you want to do:

+1

Enter your second number:

1

1.0+10.0=1.0

Вы должны потратить некоторое время на отладку своего домашнего задания. Немного побороться - это нормально.

dportman 27.04.2018 22:13
"Enter your number:", за которым следуют Number1 = scanner.nextDouble(); и "Enter your second number:", за которым следует Number1 = scanner.nextDouble();, должны быть довольно очевидной опечаткой, которую вы должны были заметить сами. Хотя, возможно, не единственный.
OH GOD SPIDERS 27.04.2018 22:16

Я знаю, что это не связано с вопросом, но инженер Java использует имена переменных в нижнем регистре.

Adrian 27.04.2018 22:20

Обмен стеками обзора кода может помочь вам codereview.stackexchange.com

Patrick 27.04.2018 22:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
4
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В этой части кода вы должны изменить это:

...
System.out.println("Enter your second number:");
try {
    Number1 = scanner.nextDouble();
}
...

к этому:

...
System.out.println("Enter your second number:");
try {
    Number2 = scanner.nextDouble();
}
...

Вы никогда не меняете значение Number2 в своем коде.

Большое спасибо, я изменил это, но я все еще получаю странные результаты, если переменная символа содержит число после фактического введенного оператора ... как бы то ни было исправить это?

Gmpro111 27.04.2018 22:21

Вам необходимо ограничить ввод таким образом, чтобы можно было вводить только символы вместо числовой строки.

Patrick 27.04.2018 22:22

Что-то хорошо иметь вторую пару глаз В вашем коде вы никогда не присваиваете значение номеру 2

System.out.println("Enter your second number:");
try {
     Number2 = scanner.nextDouble();

Другие вопросы по теме