我很好奇是否可以调用一个在while循环的条件部分返回布尔值的方法?
如:
while(someMethod()!= true){
//Do stuff
}
该方法只返回true或false。这是否可能,如果有,是否有正确的语法或更好的方法?
编辑:感谢您的快速回复。作为我的问题的扩展,有可能多次调用该方法用于不同的事情,但要求它们在退出循环之前都是相同的吗?
例如:
while(!(someMethod(input_a) == someMethod(input_b))){
//Do stuff
}
其中两个返回值都是返回值相等?
答案 0 :(得分:1)
希望这会对你有所帮助
public boolean functionOne(int i){
// some operation
if(i == 1) return true;
else return false;
}
public void otherFunc(){
int i = 0;
if(functionOne(i)) { // e.g: if(functionOne(i) == true)
// your code
// 0!=1 so result is fort
}
if(!functionOne(i)){ // e.g: if(functionOne(i) == false)
// your code
// 0!=1 it is false, but ! before functionOne negate so ! of false is true
}
// **for your while**
while(functionOne(i)){ // while function returns true
// code
}
// **or**
while(!functionOne(i)){ // while function returns false
// code
}
}
答案 1 :(得分:0)
不太好是:
while (!someMethod()) {
// Do stuff
}
将布尔结果与布尔文字进行比较绝不是一个好主意。首选使用结果内联,根据需要使用逻辑一元非运算符!
。
回答问题的现在编辑版本,更少是最好的:
while (someMethod(input_a) != someMethod(input_b))
答案 2 :(得分:0)
当然可以!
public static boolean someMethod(){
return false;
}
public static void main(String[] args){
while(!someMethod()){
//do something
System.out.println("Hi");
}
}
与此代码一样,如果方法返回false,则会调用无限循环,但如果方法返回true,则它将退出while循环。 :)
答案 3 :(得分:0)
您可以在JLS Sec 14.12中找到while循环的规范:
while语句重复执行Expression和Statement,直到Expression的值为false。
WhileStatement: while ( Expression ) Statement WhileStatementNoShortIf: while ( Expression ) StatementNoShortIf
Expression必须具有boolean或Boolean类型,否则会发生编译时错误。
因此,您可以使用boolean
类型Boolean
(或MethodInvocation
)的任何内容。
如果您点击语言规范中的作品:
Expression
,包含Expression
,包含AssignmentExpression
,包含ConditionalExpression
,包含ConditionalOrExpression
,包含ConditionalAndExpression
,包含InclusiveOrExpression
,包含ExclusiveOrExpression
,包含AndExpression
,包含EqualityExpression
,包含RelationalExpression
,包含ShiftExpression
,包含AdditiveExpression
,包含MultiplicativeExpression
,包含UnaryExpression
,包含UnaryExpressionNotPlusMinus
,包含PostfixExpression
,包含Primary
,包含PrimaryNoNewArray
唷!那已经深埋了! (您可以像继承层次结构一样阅读,因此每个PrimaryNoNewArray
都是PrimaryNoNewArray
,每个Primary
都是MethodInvocation
等。
所以,传递上,每个Expression
都是while
,因此可以将它用作EqualityExpression
循环中的表达式。
解决你的编辑:是的,那也没关系。如果您查看EqualityExpression:
RelationalExpression
EqualityExpression == RelationalExpression
EqualityExpression != RelationalExpression
:
EqualityExpression
如上所述,您可以在Expression
中使用WhileStatement
作为RelationalExpression != RelationalExpression
。
EqualityExpression
根据显示的规则,是MethodInvocation
。由于所有RelationalExpression
都是while(someMethod(input_a) != someMethod(input_b)) {
s,因此您可以在while语句中使用方法调用,如下所示:
a != b
(!(a == b)
是一种更简单的撰写@application.route("/ms_bulletins", methods=['GET', 'POST'])
}的方式。
答案 4 :(得分:-1)
这是我们在java迭代器上完成循环的方式。例如:
Iterator[String] iterator = util.Arrays.asList("One", "Two", "Three").iterator();
while(iterator.hasNext()) {
println(iterator.next());
}
我们也为JDBC ResultSet接口做了类似的事情。