Создание калькулятора, но я получаю ошибки компиляции - PullRequest
0 голосов
/ 27 мая 2019

Я учу себя Java и начал делать калькулятор, но у меня возникают две ошибки при попытке запустить код.

Я думал о реализации цикла WHILE с символами длясоздать цикл, но это не похоже на работу.Действительно сгорел, и я подумал, что это хорошее место, чтобы спросить.

import java.lang.Math;
import java.util.Scanner;

public class Calculator 
{

    public static void main(String[] args) 
    {
        double numberOne = 0;
        double numberTwo = 0;
        String operatorInput;
        Scanner myInput = new Scanner(System.in);

       System.out.print("Enter first number: ");
       numberOne = myInput.nextDouble();

       System.out.print("Enter second number: ");
       numberTwo = myInput.nextDouble();

       System.out.print("Enter the operation you wish to perform (/, *, -, +): ");
       operatorInput = myInput.nextLine();

       double result = calculate(numberOne, numberTwo, operatorInput, myInput);

       System.out.printf("The result is: %.2f%n", result);

       myInput.close();
    }

    public static double calculate(double numberOne, double numberTwo, String operatorInput, Scanner myInput)
    {
        while(true)
        {
            switch (operatorInput)
            {
                case("/"):
                {
                    myInput.close();
                    return divideNumbers(numberOne, numberTwo);
                }
                case("*"):
                {
                    myInput.close();
                    return multiplyNumbers(numberOne, numberTwo);
                }
                case("+"):
                {
                    myInput.close();
                    return addNumbers(numberOne, numberTwo);
                }
                case("-"):
                {
                    myInput.close();
                    return subtractNumbers(numberOne, numberTwo);
                }
                default: 
                {
                    System.out.println("Invalid Input");
                    System.out.print("Enter the operation you wish to perform (/, *, -, +): ");
                    operatorInput = myInput.nextLine();
                }
            }
        }
    }

    public static double divideNumbers(double numberOne, double numberTwo)
    {
        return numberOne / numberTwo;
    }
    public static double multiplyNumbers(double numberOne, double numberTwo)
    {
        return numberOne * numberTwo;
    }
    public static double addNumbers(double numberOne, double numberTwo)
    {
        return numberOne + numberTwo;
    }
    public static double subtractNumbers(double numberOne, double numberTwo)
    {
        return numberOne - numberTwo;
    }
}
Calculator.java:27: error: cannot find symbol
       operatorInput = input.nextChar();
                            ^
  symbol:   method nextChar()
  location: variable input of type Scanner
Calculator.java:55: error: incompatible types: <null> cannot be converted to double
                return null;
                       ^

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

Мне удалось решить проблему с помощью while(true) поверх switch. Кроме того, я не мог использовать nextChar(), потому что он не был поддержан сканером. Я смог исправить это, создав сканер с именем myInput. Это позволило мне продолжить пройденный мной выбор персонажа. Как только это было сделано, я смог разорвать цикл со сканером myInput.close();, см. Обновленный код выше. Еще раз спасибо всем!

 double numberOne = 0;
        double numberTwo = 0;
        String operatorInput;
        Scanner myInput = new Scanner(System.in);

       System.out.print("Enter first number: ");
       numberOne = myInput.nextDouble();

       System.out.print("Enter second number: ");
       numberTwo = myInput.nextDouble();

       System.out.print("Enter the operation you wish to perform (/, *, -, +): ");
       operatorInput = myInput.nextLine();

       double result = calculate(numberOne, numberTwo, operatorInput, myInput);

       System.out.printf("The result is: %.2f%n", result);

       myInput.close();
    }

    public static double calculate(double numberOne, double numberTwo, String operatorInput, Scanner myInput)
    {
        while(true)
        {
            switch (operatorInput)
            {
                case("/"):
                {
                    myInput.close();
                    return divideNumbers(numberOne, numberTwo);
                }
                case("*"):
                {
                    myInput.close();
                    return multiplyNumbers(numberOne, numberTwo);
                }
                case("+"):
                {
                    myInput.close();
                    return addNumbers(numberOne, numberTwo);
                }
                case("-"):
                {
                    myInput.close();
                    return subtractNumbers(numberOne, numberTwo);
                }
                default: 
                {
                    System.out.println("Invalid Input");
                    System.out.print("Enter the operation you wish to perform (/, *, -, +): ");
                    operatorInput = myInput.nextLine();
                }
            }
        }
    }
0 голосов
/ 27 мая 2019

вы можете изменить тип двойного примитива на объект Double, чтобы иметь возможность возвращать нулевое значение.Также вы можете преобразовать operatorInput в строку и прочитать его как input.next (). Вот пример того, какие изменения я предлагаю:

import java.util.Scanner;

public class Calculator 
{
public static void main(String[] args) 
{
    double numberOne = 0;
    double numberTwo = 0;
    String operatorInput;

Scanner input = new Scanner(System.in);

   System.out.print("Enter first number: ");
   numberOne = input.nextDouble();

   System.out.print("Enter second number: ");
   numberTwo = input.nextDouble();

   System.out.print("Enter the operation you wish to perform (/, *, -, +): ");
   operatorInput = input.next();
   System.out.println(calculate(numberOne, numberTwo,operatorInput));

}



public static Double calculate(double numberOne, double numberTwo, String operatorInput)
{
    switch (operatorInput)
    {
        case("/"):
        {
            return divideNumbers(numberOne, numberTwo);
        }
        case("*"):
        {
            return multiplyNumbers(numberOne, numberTwo);
        }
        case("+"):
        {
            return addNumbers(numberOne, numberTwo);
        }
        case("-"):
        {
            return subtractNumbers(numberOne, numberTwo);
        }
        default: 
        {
            System.out.println("Invalid Input");
            return null;
        }
    }

}

public static double divideNumbers(double numberOne, double numberTwo)
{
    return numberOne / numberTwo;
}
public static double multiplyNumbers(double numberOne, double numberTwo)
{
    return numberOne * numberTwo;
}
public static double addNumbers(double numberOne, double numberTwo)
{
    return numberOne + numberTwo;
}
public static double subtractNumbers(double numberOne, double numberTwo)
{
    return numberOne - numberTwo;
}

}

...