2015-02-23 86 views
0

我有一個在Unity中的c#腳本,並有一個問題。我試圖檢查兩個浮點數是否等於零倒數計時器。一旦達到零,就做點什麼。if語句使用&&兩個浮點數?

當我這樣做

if (minutes && seconds <= 0){ 
     Debug.Log("countdown timer has finished"); 
    } 

我得到的錯誤;

錯誤CS0019:操作&&' cannot be applied to operands of type浮動「和'布爾」

我明白是怎麼回事,我的問題是我怎麼能檢查如果兩個浮筒達到零,的debug.log。

+0

_I'm試圖檢查兩個浮點數是否等於零_你沒有這樣做你的代碼。你只是檢查'seconds'小於或等於零,而不是'分鐘'。 '&&'運算符期望在兩側都有布爾表達式。 – 2015-02-23 09:09:56

+1

爲什麼分鐘和秒鐘浮動?我只是簡單地將它們作無符號整數。 – 2015-02-23 09:25:08

+0

你實際上在做的是檢查'minutes'是否爲true,如果'seconds' <= 0。'minutes'不是'bool'(即它沒有真/假值),因此錯誤。 – colmde 2015-02-23 09:32:34

回答

8

你不能檢查多個這樣的變量。你必須改變你的代碼:

if (minutes <= 0 && seconds <= 0){ 
     Debug.Log("countdown timer has finished"); 
    } 

或者,如果你有很多的變量來檢查這樣,那麼你就可以創建新的列表,並使用Any()方法從日System.Linq命名空間。 (但是,作爲@Marc評論,如果您還沒有一個清單呢,那麼不建議):

if (!(new[] { firstFloat, secondFloat, thirdFloat }).Any(x => x > 0)); 

但是,如果你有一個列表或數組,這將是更更好更簡單:

if (!myList.Any(x => x > 0)); 
+6

新列表(或數組)對於單謂語測試IMO來說是大規模過度殺傷的;如果你已經有清單和內容:沒問題 – 2015-02-23 09:16:00

1

C#不直接在「如果」條件(當然,你可以做到這一點與功能)提供任何語法單一條件/運營商的應用在許多因素的綜合影響。

你必須單獨測試每一個條件:

if (minutes <= 0 && seconds <= 0) 
{ 
    Debug.Log("countdown timer has finished"); 
} 

你也可以使用一個更好的數據類型來處理所有的「時間」相關的測試,如時間跨度,甚至出現「總秒數計算」單變量。單獨的「秒」和「分鐘」變量聽起來很奇怪。

0

在C#中你不能像這樣做float比較。在C++中,布爾值true被視爲非零值,而false則爲零。這就是爲什麼我們可以直接比較float值和if條件。但在C#中,你必須指定完整的條件。

if (minutes <= 0 && seconds <= 0){ 
     Debug.Log("countdown timer has finished"); 
    }