如何通过一种方法给出2种不同的数据类型

时间:2019-07-02 00:00:34

标签: java

我想使用方法,if语句和用户输入来做一个简单的初学者项目。我在使用calc()方法时遇到问题。如何在java中返回两种不同的数据类型,如果无法返回,如何仍然可以使用main方法之外的方法呢?


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 个答案:

答案 0 :(得分:1)

您可能会生成一个自定义的Exception,还需要在if验证内使用.equals()方法,否则它将无法正常工作。

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);
    }
}

答案 1 :(得分:0)

我建议返回OptionalDouble对象作为有效值或无效值的占位符...

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

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

然后您的main(...)方法需要类似于...

System.out.println(calc(num1,op,num2).orElseThrow(() -> new IllegalArgumentException("INVALID OPERATOR")));

答案 2 :(得分:0)

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");
            }

        }