2011-02-10 146 views
2

我有一個數組包含代表電纜大小(1,1.5,2.5等)的數字,存儲爲字符串。爲什麼字符串比較在我的代碼中失敗?

在我的程序中,數組被加載到一個微調器,它工作正常。 但是,當項目被選中並存儲在一個變量中時,我想檢查選中的字符串,並將另一個數值變量設置爲2.5,以便稍後在程序中進行計算。

我嘗試以下:

if (conductorSize = "1") {conCsa = 1;} 
else if (conductorSize = "1.5") {conCsa = 1.5;} 

conductorSize作爲變量保持所選擇的字符串,並且conCsa是可變 組用於計算的數字變量。

編譯器說我無法將字符串轉換爲布爾值。發生了什麼?

回答

12

如果你正在做字符串比較,使用.equals()從here採取 例子:

String s = "something", t = "maybe something else"; 
if (s == t)  // Legal, but usually WRONG. 
if (s.equals(t)) // RIGHT <<<<<<<<<<<<< Use this. 
if (s > t) // ILLEGAL 
if (s.compareTo(t) > 0) // CORRECT> 
+0

謝謝,這是一種享受! – Coops5575 2011-02-12 11:19:01

+0

如果您滿意,請點擊問題側面的複選標記接受答案。 =) – f20k 2011-02-12 14:17:17

3

愛德S.指出您正在使用的賦值運算符。但是,由於您正在比較String,您需要使用equals方法。

if ("1".equals(conductorSize)) {conCsa = 1;} 
else if ("1.5".equals(conductorSize)) {conCsa = 1.5;} 

或者,你可以只是從你的String創建一個新的float

float conCsa; 
try { 
    conCsa = Float.parseFloat(conductorSize); 
}catch(NumberFormatException e){ 
    conCsa = 0.0f; //set to a default value 
} 
+0

或`Double.parseDouble(conductorSize)`如果雙精度要求/首選。 – Thomas 2011-02-10 18:13:01

0

它看起來就像你正在試圖做什麼可能更好用這種方式來表達:

conCsa = Double.parseDouble(conductorSize); 
0

一般來說,您需要使用.equals()方法。 如果性能非常重要,並且您正在比較字符串文字,請參閱String.intern()。它可以讓你做超快速的==比較,並避免像.equals()中的逐個字符掃描。爲了證明這種非標準方法的合理性,性能必須非常非常重要。

0

當你有常數的電纜尺寸時,你需要使用Enums,這將有助於減少條件比較中的no。