Java 为什么这是表达的非法开始?
我在java中创建了这个方法,如果字符串包含字母“I”,则替换它的元音: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 最后,它说该方法需要一个返回值
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
请注意,这两个运算符之间存在差异,即使在使用onboolean
值时也是如此。|
操作符将始终计算整个表达式,即使结果值已经很清楚。如果结果已经很清楚,则|
将中止计算,如中所示
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感谢您指出这一点。我已经更新了我的答案。