2011-02-10 113 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。