簡體   English   中英

如何在 if 語句中使用這個布爾值?

[英]How to use this boolean in an if statement?

private String getWhoozitYs(){
    StringBuffer sb = new StringBuffer();
    boolean stop = generator.nextBoolean();
    if(stop = true)
    {
        sb.append("y");
        getWhoozitYs();
    }
    return sb.toString();
}

這是我在編程課程中做的一個項目的一段代碼。 我遇到的問題是,在聲明布爾停止並嘗試為其分配隨機生成的布爾值后,我無法在 if 語句中使用它來確定是否應該將更多 y 附加到 StringBuffer 中。 我的構造函數中有 Random 生成器,所以這部分不是問題。 我假設因為我在 if 語句之外聲明了布爾值,所以我可以在內部使用它,但情況似乎並非如此。 真正的問題是如何在 if 語句中使用隨機確定的布爾值。

if(stop = true)應該是if(stop == true) ,或者只是(更好!) if(stop)

這實際上是一個很好的機會來看看為什么總是使用if(something)如果你想看看它是否是true而不是寫if(something == true) (糟糕的風格!)。

通過執行stop = true那么您將true分配給stop而不是比較。

那么為什么執行if語句下面的代碼呢?

參見JLS - 15.26。 賦值運算符

在運行時,賦值表達式的結果是賦值發生后變量的值。 賦值表達式的結果本身不是變量。

所以因為你寫了stop = true ,那么你就滿足了if條件。

這里的問題是

if (stop = true)是賦值而不是比較。

試試if (stop == true)

還可以查看Java 程序員犯的十大錯誤

實際上,如果您只需要使用 StringBuffer 的一個實例,而不是在每個遞歸調用中創建一個實例,那么整個方法會更清晰……我會選擇:

private String getWhoozitYs(){
     StringBuffer sb = new StringBuffer();
     while (generator.nextBoolean()) {
         sb.append("y");
     }

     return sb.toString();
}
if(stop == true)

要么

if(stop)

= 用於賦值。

== 用於檢查條件。

if(stop = true) 

它將分配 true 以停止並評估 if(true)。 所以它總是會執行里面的代碼,因為 stop 總是被賦值為 true。

由於stop是布爾值,您可以將該部分更改為:

//...
if(stop) // Or to: if (stop == true)
{
   sb.append("y");
   getWhoozitYs();
}
return sb.toString();
//...

試試這個:-

private String getWhoozitYs(){
    StringBuffer sb = new StringBuffer();
    boolean stop = generator.nextBoolean();
    if(stop)
    {
        sb.append("y");
        getWhoozitYs();
    }
    return sb.toString();
}

= 用於賦值

if(stop){
   //your code
}

要么

if(stop == true){
   //your code
}

另外你可以寫

if(stop)
{
        sb.append("y");
        getWhoozitYs();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM