2014-01-22 84 views
0

我想創建我的web服務的方法,但是我收到的稱號使用未分配的局部變量「totalroadtax」

未分配的局部變量「totalroadtax」的使用

上市這個錯誤的

這是用戶怎麼也得輸入2個不同的變量觸發方法將WebMethod

[WebMethod] 
public double RoadTax(int engineCapacity, int vehicleAge) 
{ 
    double totalroadtax; 

    if (engineCapacity.Equals("600") && vehicleAge.Equals("12")) 
    { 
     totalroadtax = ((200.00 * 0.782) * (1.10)); 
    } 

    return totalroadtax; 
    //return (engineCapacity - vehicleAge); 
} 

我宣佈我的totalroadtax在我的方法,inpu t一些計算方法並返回值。我檢查了這種方法的必要信息,但仍然收到錯誤消息。我在這裏留下什麼了嗎?

回答

5

if可能會被跳過(如果條件爲false)並且您返回totalroadtax。因爲您沒有初始值聲明變量,因此該變量未在該位置初始化。

你應該用一些初始值聲明變量,如:

double totalroadtax = 0; 

編輯:

你的代碼不必要int值與string文字。這是更清潔,更高效的執行狀況是這樣的:

[WebMethod] 
public double RoadTax(int engineCapacity, int vehicleAge) 
{ 
    double totalroadtax = 0; 

    if (engineCapacity == 600 && vehicleAge ==12) 
    { 
     totalroadtax = ((200.00 * 0.782) * (1.10)); 
    } 

    return totalroadtax; 
} 

有沒有必要打電話Equals() - 在==運營商更好地讀取並執行一個類型安全檢查。

我還建議您不要對浮點值執行直接的等式檢查。除了使用==的,你應該檢查類似:

if ((engineCapacity >599.9999 && engineCapacity < 600.00001) && ... 

這是因爲浮點值不準確小數的表示。

閱讀question瞭解更多詳情。

3

totalroadtax在未滿足if條件時未分配。將您的聲明更改爲:

double totalroadtax = 0d; 
+0

在這裏使用'd'文字有什麼好處嗎? –

+0

@ Selman22不,它只是表明文字0是'double'類型的。 – xxbbcc

+0

但我不太確定爲什麼.asmx返回的值爲0。 –

3

總是初始化變量是一種很好的做法。

在這種特殊情況下,如果if的計算結果爲false,則變量totalroadtax將返回未初始化狀態。要解決此問題,你需要初始化totalroadtax

double totalroadtax = 0d; 

這裏是另一種更好的解決方案海事組織,避免了變量一起:

[WebMethod] 
public double RoadTax(int engineCapacity, int vehicleAge) 
{ 
    if (engineCapacity.Equals("600") && vehicleAge.Equals("12")) 
    { 
     return ((200.00 * 0.782) * (1.10)); 
    } 

    return 0d; 
} 
+0

我試着運行.asmx中的webmethod,但它返回給我一個0.可能是由於'return 0d;'? –

+1

@TeoChuenWeiBryan'if'條件沒有改變,所以它必定是你的病情的問題。 –

+0

另外,'0d'是可選的,它只是表示它是'double',而不是'int'。這是很好的做法,因爲它可以防止可能的轉換(在其他情況下)並傳達開發人員的意圖。 –

0

沒有太多添加到以前的答案如此我將從明顯的開始:你的方法不會初始化變量。

你也提到你的方法每次也返回0。考慮這條線:

engineCapacity.Equals("600") && vehicleAge.Equals("12") 

這裏的原因:

在這種情況下,Equals將比較一個string"600")和intengineCapacityvehicleAge)。 if條件將失敗並返回0。改爲使用==相等運算符使用int s來比較值。