2017-04-21 77 views
-5

這是我寫的一小段代碼;簡而言之,我很困難,無法弄清楚我做錯了什麼。基本上我的代碼意圖是檢查我的布爾數組;找出是否列出更多的連續或錯誤。虛假當然是更多的,所以它應該返回假的我的主要方法。Java:Boolean不返回false到Main方法

public class FalseBoolean 
{ 
    public static void main(String [] args) { 
     boolean[] guess = {false,true,false,false,false,true,true}; 
     boolean result = longerTF(guess); 
    } 

    public static boolean longerTF(boolean[] guess) { 

     int variableTrue = 0; 
     int variableFalse = 0; 

     for(int x = 0; x < guess.length; x++) { 
      if(guess[x] == true) { 
       variableTrue++; 
      } else { 
       variableFalse++; 
      } 
      return variableFalse; 
     } 
    } 
} 
+0

您從不使用main中的'result'值。你怎麼知道這段代碼不起作用? –

+3

這段代碼是否應該編譯? [如何創建一個最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve) –

+1

你想實現什麼?假計數? – Abhishek

回答

1

試試這個(提出了一些邏輯變化)

public class FalseBoolean 
{ 
public static void main(String [] args) 
{ 
    boolean[] guess = 
{false,true,true,true,true,false,false,false,true,true}; 

    boolean result = longerTF(guess); 

    System.out.println(result); 

} 

public static boolean longerTF(boolean[] guess) 
{ 

    int consecutiveVariableTrue = 0, maxConsecutiveVariableTrue = 0; 
    int consecutiveVariableFalse = 0, maxConsecutiveVariableFalse = 0; 

    for(int x = 0; x < guess.length; x++) 
    { 
     if(guess[x] == true) { 
      consecutiveVariableTrue++; 
      if (maxConsecutiveVariableTrue < consecutiveVariableTrue) 
       maxConsecutiveVariableTrue = consecutiveVariableTrue; 
     } else { 
      consecutiveVariableTrue = 0; 
     } 

    } 

    for(int x = 0; x < guess.length; x++) 
    { 
     if(guess[x] == false) { 
      consecutiveVariableFalse++; 
      if (maxConsecutiveVariableFalse < consecutiveVariableFalse) 
        maxConsecutiveVariableFalse = consecutiveVariableFalse; 
     } else { 
      consecutiveVariableFalse = 0; 
     } 

    } 

    if (maxConsecutiveVariableTrue >= maxConsecutiveVariableFalse) { 

     return true; 

    } 

    return false; 
} 
} 
+0

這段代碼如何做*找出真正的是否連續列出*你所做的只是計算髮生的事件 –

+0

Ohhhh ......我沒有讀到......我將更新...... – Abhishek

+1

圍繞返回語句是毫無意義的。只需返回比較 –

0

您正在試圖返回int變量時,你明明聲明你的方法作爲boolean類型。做到這一點,而不是:

if(variableFalse > variableTrue){ 
    return false; 
}else if(variableTrue > variableFalse){ 
    return true; 
}else{ 
    //Default return statement 
} 

而且,在這種特殊情況下(因爲你正在處理一個數組),不包括在for循環return語句。

,如果我沒有使用手機我會解釋這更好的:P

1

眼前的問題,應返回一個布爾值,而不是一個整數。你可以通過簡單地檢查哪一個數最大來做到這一點。

你的第二個問題是在你看完整個數組之後返回,而不僅僅是第一個元素。

public static boolean longerTF(boolean[] guess) { 

    int variableTrue = 0; 
    int variableFalse = 0; 

    for(int x = 0; x < guess.length; x++) { 
     if(guess[x]) { 
      variableTrue++; 
     } else { 
      variableFalse++; 
     } 
    } 
    return variableTrue >= variableFalse; 
} 

注意:你只需要一個陣列中的兩個可能的值...例如一個計數器,

int variableFalse = guess.length - variableTrue; 

你的問題問的連續元素,但只返回此代碼時出現的最在整個數組中,所以繼續處理邏輯