【问题标题】:Issue with returning a char [duplicate]返回字符的问题[重复]
【发布时间】:2017-01-18 06:03:33
【问题描述】:

我不明白为什么我收到一条错误消息,指出方法 getClassification 必须返回 char 类型的结果。

private char A, B, C, D;

public char getClassification() {
    if(parts[0] >= 0 && parts[0] <= 127)
        return (A);
    else if(parts[0] >= 128 && parts[0] <= 191)
        return (B);
    else if(parts[0] >= 192 && parts[0] <= 223)
        return (C);
    else if(parts[0] >= 224 && parts[0] <= 255)
        return (D);
}

【问题讨论】:

  • 这是因为你所有的 return 语句都是有条件的。如果所有条件都为假,则方法将结束而不返回任何内容。
  • 如答案和 cmets 中所述,您需要“默认”return 语句,如果您的程序中永远不会出现 case,您应该 @ 987654325@ 和 [Runtime]Exception。见Fail Fast principle

标签: java if-statement methods char return-type


【解决方案1】:

需要else语句或默认return语句

【讨论】:

  • 这需要更多解释才能成为一个好的答案。
【解决方案2】:

当所有 if 条件为假时,getClassification 不返回值。

private char A, B, C, D;

public char getClassification() {
    if(parts[0] >= 0 && parts[0] <= 127)
        return (A);
    else if(parts[0] >= 128 && parts[0] <= 191)
        return (B);
    else if(parts[0] >= 192 && parts[0] <= 223)
        return (C);
    else if(parts[0] >= 224 && parts[0] <= 255)
        return (D);
    else
       return //Something Else(char Value)
}

这应该可行。

【讨论】:

  • 没关系,即使你在每个if 语句中加上true(如if(true)),编译器也会报错。所以这个解释不是100%正确的。
  • 如果那部分代码中的非法状态,则应考虑使用throw new SomeException(),而不是默认的return 语句。 // 顺便说一句,else 有助于冗长,但也可以省略。
【解决方案3】:

您已将每个return 语句放入if 语句中。

当您将所有 return 语句放入 if 条件中时,编译器不够聪明,无法确定您从函数返回的内容(即使函数肯定会返回提到的类型)。

尝试编译它,编译器会抱怨同样的事情:

public char getClassification() {
    if(true) return 'a';
}

【讨论】:

    【解决方案4】:

    您根据 if 条件返回字符 a、b、c、d,但在某些条件下,如果所有条件都为假(例如,parts[0] >255 或parts[0]

    private char A, B, C, D;
    
    public char getClassification() {
        if(parts[0] >= 0 && parts[0] <= 127)
            return (A);
        else if(parts[0] >= 128 && parts[0] <= 191)
            return (B);
        else if(parts[0] >= 192 && parts[0] <= 223)
            return (C);
        else if(parts[0] >= 224 && parts[0] <= 255)
            return (D);
        else
            return 'E';
    }

    私有字符 A、B、C、D;

    public char getClassification() {

    如果(部分[0] >= 0 && 部分[0]

    else if(parts[0] >= 128 && parts[0] <= 191)
        return (B);
    else if(parts[0] >= 192 && parts[0] <= 223)
        return (C);
    else if(parts[0] >= 224 && parts[0] <= 255)
        return (D);
    

    }

    【讨论】:

      猜你喜欢
      • 2017-06-14
      • 1970-01-01
      • 2012-11-06
      • 2014-12-05
      • 2020-03-15
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多