Java 为什么这是表达的非法开始?

Java 为什么这是表达的非法开始?,java,netbeans,Java,Netbeans,我在java中创建了这个方法,如果字符串包含字母“I”,则替换它的元音: public static boolean esVocal(Character c) { boolean res = false; if (c == 'a' | c == 'o' | c == 'e' | c == 'u') { res = true; } } 无论如何,给我的错误是: illegal start of expression 最后,它说该方法需要一个返回值

我在java中创建了这个方法,如果字符串包含字母“I”,则替换它的元音:

public static boolean esVocal(Character c) {
    boolean res = false;
    if (c == 'a' | c == 'o' | c == 'e' | c == 'u') {
        res = true;   
    }
}
无论如何,给我的错误是:

illegal start of expression
最后,它说该方法需要一个
返回值

错误可能在语法中吗?

解释 您的方法签名

public static boolean esVocal(Character c)
声明返回类型
布尔值
。这意味着您的方法应该返回
布尔类型的


解决方案 如果不想返回任何内容,则应将返回类型声明为
void

public static void esVocal(Character c)
或者,如果要返回某些内容,则需要将相应的语句添加到方法中:

public static boolean esVocal(Character c) {
    boolean res = false;

    if (c == 'a' | c == 'o' | c == 'e' | c == 'u') {
        res = true;   
    }

    // You probably wanted to return this
    return res;
}

笔记 请注意,您可以通过直接返回生成的
布尔值来减少方法,如:

public static boolean esVocal(Character c) {
    return c == 'a' | c == 'o' | c == 'e' | c == 'u';
}
数字上的运算符
|
逻辑or。它是一种逐位包含或操作,对值进行一些位操作,如:

   0100 1110
or 1000 1011
   ---------
   1100 1111
但是,在
布尔表达式上,就像在您的例子中一样,它也执行为逻辑or(请参阅)

还有运算符
|
,它的行为始终为逻辑or

请注意,这两个运算符之间存在差异,即使在使用on
boolean
值时也是如此。
|
操作符将始终计算整个表达式,即使结果值已经很清楚。如果结果已经很清楚,则
|
将中止计算,如中所示

true || someBoolean || someOtherBoolean
true
已经使整个结果
true
|
不会计算表达式的其余部分,而
|

但是,在您的情况下,您可能希望使用
|

c == 'a' || c == 'o' || c == 'e' || c == 'u'

对于逻辑and
&
&
的区别是相同的。

如果考虑逻辑OR操作,最好使用
|
而不是
运算符。因此,您可以如下更新
if
条件。[另一个答案中提供了一个很好的解释]

if (c=='a' || c=='o' || c=='e' || c=='u'){
    res=true;   
}
此外,方法签名将返回类型声明为布尔值,因此需要从函数返回布尔值。您可以简单地执行以下操作

public static boolean esVocal(Character c){
    return c=='a' || c=='o' || c=='e' || c=='u';
}

唯一的错误是缺少返回值。添加
返回res| |
会更好,
|
工作正常,只是不会短路。@JonSkeet感谢您指出这一点。我已经更新了我的答案。