有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java,我如何在方法中放置一个开关盒?

我试图在一个三角形类中实现一个getter方法,该类中有一个switch语句。通常,我会为每个参数逐个编写getter方法,但我认为可以使用switch语句来优化它

通常,它会是这样的

public double getSide1(){
    return side1;
}

但每个三角形边有三次。但我想做一些事情,比如

public double getSide(int n) {
    switch (n) {
        case 1: return side1; 
        case 2: return side2; 
        case 3: return side3; 
        default: System.out.println("Not a valid side.");
    }
}

出于某种原因,它无法识别开关盒本身中的返回。因此,我必须在末尾添加return 0。但这样的话,回报率将是0

那么我该如何解决这个问题呢


共 (3) 个答案

  1. # 1 楼答案

    为了避免这个问题,并遵循最佳实践来降低复杂性,最好只有一条“返回路径”

    例如:

    public double getSide(int n) {
        int result = 0;  // default value
        switch (n) {
            case 1: result = side1;
            case 2: result = side2;
            case 3: result = side3;
            default: 
               System.out.println("Not a valid side.");
        }
        return result;
    }
    
  2. # 2 楼答案

    ... So I have to add return 0 at the end. But then the return would be 0.

    如果您不返回任何东西,那么您选择了一个,抛出一个选中或未选中的异常:

    public double getSide(int n) {
        switch (n) {
            case 1: return side1;
            case 2: return side2;
            case 3: return side3;
            default: 
               throw new RuntimeException("Not a valid side.");
        }
    }
    

    或者:

    public double getSide(int n) throws IllegalAccessException {
        switch (n) {
            case 1: return side1;
            case 2: return side2;
            case 3: return side3;
            default:
                throw new IllegalAccessException("Not a valid side.");
        }
    }
    
  3. # 3 楼答案

    问题出现在switch语句的默认情况下:

    default: System.out.println("Not a valid side.");
    

    仅输出错误消息是不够的

    您必须返回一些默认值

    default: {
        System.out.println("Not a valid side.");
        return 0;
    }
    

    或者(更好)在达到默认情况时抛出异常

    default: throw new IllegalArgumentException ("Not a valid side.");