2016-11-22 46 views
-1

我很好奇是否有可能調用在while循環的條件部分中返回布爾值的方法?在while循環條件中調用方法

如:

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

而且方法簡單地返回一個true或false。這是否可能,如果有,是否有正確的語法或更好的方法?

編輯:感謝您的快速回復。作爲對我的問題的擴展,是否可以針對不同的事情多次調用該方法,但在退出循環之前要求它們都是相同的?

例如:

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

如果雙方返回值是返回的值相等?

+0

雖然'while(!someMethod())'會更傳統,但它是可能的,而且基本上它是正確的。 – shmosel

+0

你真的嘗試過嗎?這是找出是否有可能的最簡單的方法。如果你發現它不是,那麼你可以在問題中發佈實際的錯誤。 –

+0

@AndyTurner我有,但似乎沒有按預期工作。這段代碼應該是戰列艦遊戲的一部分,while循環旨在測試兩艘戰艦是否重疊。它似乎不工作,因爲我願意,即船舶彼此重疊。問題是隻有當我試圖在while循環中多次調用該方法時纔會出現問題。 – user3444341

回答

0

最好少:

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

這是從來沒有要比較的一個布爾結果一個布爾值是一個好主意。根據需要使用邏輯一元非運算符!,首選使用結果內聯。


回答這個問題的,現在編輯的版本,少即是仍然是最好:

while (someMethod(input_a) != someMethod(input_b)) 
+0

它實際上是否會影響性能,或者僅僅是因爲它不必要的混亂,而不是按照慣例? – Gendarme

+2

@Gendarme主要是雜亂的,但也是一種避免陰險的「意外任務」錯誤的風格:比較'if(a == true)'和'if(a = true)'。編譯和執行,但其中之一顯然是一個錯誤。雖然你不能分配給方法結果,但總是遵循這種風格是一種很好的習慣。你應該擴展它以優先'返回myBooleanMethod();'通過'if(myBooleanMethod())返回true;否則返回false;'et al – Bohemian

-1

這是我們做對Java迭代循環的方式。例如:

Iterator[String] iterator = util.Arrays.asList("One", "Two", "Three").iterator(); 
while(iterator.hasNext()) { 
    println(iterator.next()); 
} 

我們也爲JDBC ResultSet接口做了類似的事情。

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 
    } 
} 
+0

當然,在你簡單的例子中,'else'會更好。我知道你只是爲了教育目的而展示。 –

+0

是的,應該有別的,你說:) – RobertS

0

是當然的!

public static boolean someMethod(){ 
    return false; 
} 

public static void main(String[] args){ 
    while(!someMethod()){ 
     //do something 
     System.out.println("Hi"); 
    } 
    } 

如在此代碼,如果該方法返回false無限循環將被調用,但是如果該方法返回true,它只會來while循環了。 :)

0

你可以找到while循環的規格在JLS Sec 14.12

while語句執行表達式和語句重複,直到表達式的值是假的。

WhileStatement: 
    while (Expression) Statement 
WhileStatementNoShortIf: 
    while (Expression) StatementNoShortIf 

表達式必須具有布爾類型或布爾類型,否則會發生編譯時錯誤。

所以,你可以使用任何東西它的類型是boolean(或Boolean)的Expression

如果你通過點擊在語言規範的製作:

唷!這是相當深埋的! (你可以像繼承層次一樣讀取它,所以每個MethodInvocation是一個PrimaryNoNewArray,並且每個PrimaryNoNewArray是一個Primary等)。

因此,在過渡性方面,每個MethodInvocation都是Expression,因此可以用它作爲while循環中的表達式。


解決你的編輯:是的,這也沒關係。如果你看一下EqualityExpression的細節:

EqualityExpression: 
    RelationalExpression 
    EqualityExpression == RelationalExpression 
    EqualityExpression != RelationalExpression 

正如已經如上所述,你可以在一個WhileStatement使用EqualityExpressionExpression。並且形式如下

RelationalExpression != RelationalExpression 

是按照規則顯示的EqualityExpression。由於所有MethodInvocation s爲RelationalExpression S,你可以在while語句中使用的方法調用,你已經證明:

while(someMethod(input_a) != someMethod(input_b)) { 

a != b是寫!(a == b)更簡單的方法)。