在while循环条件中调用方法

时间:2016-11-22 00:28:46

标签: java while-loop

我很好奇是否可以调用一个在while循环的条件部分返回布尔值的方法?

如:

    while(someMethod()!= true){
          //Do stuff
    }

该方法只返回true或false。这是否可能,如果有,是否有正确的语法或更好的方法?

编辑:感谢您的快速回复。作为我的问题的扩展,有可能多次调用该方法用于不同的事情,但要求它们在退出循环之前都是相同的吗?

例如:

while(!(someMethod(input_a) == someMethod(input_b))){
    //Do stuff
}

其中两个返回值都是返回值相等?

5 个答案:

答案 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)的任何内容。

如果您点击语言规范中的作品:

唷!那已经深埋了! (您可以像继承层次结构一样阅读,因此每个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接口做了类似的事情。