Как дать 2 разных типа данных из метода - PullRequest
0 голосов
/ 02 июля 2019

Я хочу сделать простой проект для начинающих, используя методы, операторы if и пользовательский ввод. У меня проблема с методом calc (). Как я могу вернуть два разных типа данных в Java, и если я не могу, как я могу это сделать, все еще используя больше, чем основной метод?


import java.util.Scanner; //allow user input

public class fourFunctionCalculator{
    public static void main(String[] args) {
        Scanner keyboardInput = new Scanner(System.in);

        System.out.print("Enter your first number:"); //get first number
        double num1 = keyboardInput.nextDouble();

        System.out.print("Enter your operator: ");     // get operator
        String name = keyboardInput.next(); //grabs everything user types until a space

        System.out.print("Enter your second number: ");  //get second number
        double num2 = keyboardInput.nextDouble();

        System.out.println(calc(num1,op,num2));
    }


//troublesome part is here
    public static double calc(double num1, String op, double num2){
        if (op == "+") {
            return (num1 + num2);
        }
        else if (op == "-") {
            return (num1 - num2);
        }
        else if (op == "*") {
            return (num1 * num2);
        }
        else if (op == "/") {
            return (num1 / num2);
        }
        else {
            return ("INVALID OPERATOR");
        }

    }
}

Ответы [ 3 ]

1 голос
/ 02 июля 2019

вы можете создать пользовательское исключение, также вам нужно использовать метод .equals () внутри проверок if, иначе он не будет работать.

fourFunctionCalculator.java

import java.util.Scanner; //allow user input

public class fourFunctionCalculator{
    public static void main(String[] args) {
        Scanner keyboardInput = new Scanner(System.in);
        System.out.print("Enter your first number:"); //get first number
        double num1 = keyboardInput.nextDouble();
        System.out.print("Enter your operator: ");     // get operator
        String name = keyboardInput.next(); //grabs everything user types until a space
        System.out.print("Enter your second number: ");  //get second number
        double num2 = keyboardInput.nextDouble();
        try {
            System.out.println(calc(num1,name,num2));
        } catch (InvalidOperatorException e) {
            System.out.println(e);
        }

    }


    public static double calc(double num1, String op, double num2){
        if (op.equals("+")) {
            return (num1 + num2);
        }
        else if (op.equals("-")) {
            return (num1 - num2);
        }
        else if (op.equals("*")) {
            return (num1 * num2);
        }
        else if (op.equals("/")) {enter code here
            return (num1 / num2);
        }
        throw new InvalidOperatorException("INVALID OPERATOR : " + op);
    }
}

InvalidOperatorException.java

public class InvalidOperatorException 
extends RuntimeException {
    private static final long serialVersionUID = 1L;

    public InvalidOperatorException(String errorMessage) {
        super(errorMessage);
    }
}
0 голосов
/ 02 июля 2019
I suggest returning always String.


 public static String calc(double num1, String op, double num2){
            if (op == "+") {
                return String.valueOf(num1 + num2);
            }
            else if (op == "-") {
                return String.valueOf(num1 - num2);
            }
            else if (op == "*") {
                return String.valueOf(num1 * num2);
            }
            else if (op == "/") {
                return String.valueOf(num1 / num2);
            }
            else {
                return ("INVALID OPERATOR");
            }

        }
0 голосов
/ 02 июля 2019

Я рекомендую возвращать объект OptionalDouble в качестве заполнителя чего-то действительного или нет ...

Ex #1:  return OptionalDouble.of(num1 + num2); // first if outcome

Ex #2:  return OptionalDouble.empty(); // for the last else

Тогда ваш основной (...) метод должен быть чем-то вроде ...

System.out.println(calc(num1,op,num2).orElseThrow(() -> new IllegalArgumentException("INVALID OPERATOR")));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...