2011-11-16 42 views
-1

我有以下代碼,返回令我困惑。我是java新手,並不完全確定它爲什麼會以這種方式返回。任何幫助都會很棒。字符串Concatenation

當數據具有PE846A846它返回engineamboengineambo。我期待只返回engineambo

String soundString = ""; 

    if (data.contains("PE846")) { 
     soundString += "engine"; 
     betaString = "Engine : "; 
     sign = engine; 
    } 
    if (data.contains("A846")) { 
     soundString += "ambo"; 
     betaString += "Ambo : "; 
     sign = ambo; 
    } 
    if (data.contains("MD846")) { 
     soundString += "medic"; 
     betaString += "Medic"; 
     sign = medic; 
    } 

    log.info(betaString + " Alerted"); 

    { 
     new AudioPlayer("sounds/" + soundString + ".wav").start(); 
     log.info(soundString); 
    } 
+5

您的代碼示例甚至不包括返回。 – millimoose

+0

你的意思是soundString的內容? – Tudor

+0

你的意思是它返回3個元素?一個方法不能返回多個。請解釋。 –

回答

5

您可以嘗試一行一行地追蹤代碼。如果它包含PE846和A846(但不是MD846),那麼它將運行前兩個條件塊,從而執行如下:

if (data.contains("PE846")){ // The string does contain PE846, per your question 
    soundString += "engine"; // soundString = "" + "engine" = "engine" 
    betaString = "Engine : "; // betaString = "Engine : " 
    sign = engine;    // sign = engine 
} 
if (data.contains("A846")){ // The string does contain A846, per your question 
    soundString += "ambo";  // soundString = "engine" + "ambo" 
    betaString += "Ambo : "; // betaString = "Engine : " + "Ambo : " = "Engine : Ambo : " 
    sign = ambo;    // sign = ambo (overwriting the previous value, "engine") 
} 
if (data.contains("MD846")){ // The string does not contain MD846, per your question 
    soundString += "medic"; // not executed 
    betaString += "Medic";  // not executed 
    sign = medic;    // not executed 
} 

log.info(betaString + " Alerted"); // betaString + " Alerted" => "Engine : Ambo : Alerted" 
{ 
    new AudioPlayer("sounds/"+ soundString +".wav").start(); 
    log.info(soundString);   // soundString => "engineambo" 
} 
0

如果數據中包含PE846-A846,它只包含PE,A和PE & & A. if語句你應該先檢查PE & & A有一個,如果失敗,檢查每個單獨使用

1

嘗試重寫代碼不具有獲得重新分配經常變量。 final關鍵字將阻止變量的第二次賦值,並且這將消除檢查整個程序流的需求,以查看以前的賦值是否影響後面的賦值。另外,除非您確實要將數據添加到現有數據,否則請避免使用+=。另外,如果您將某些內容設置爲「正確的值」,如果其他值不可能,請不要繼續進行更改。

喜歡的東西

String mystring; 

if (data.contains("MD846")) { 
    mystring = "medic"; 
} else if (data.contains("A846")) { 
    mystring = "ambo"; 
} 

不能設置的MyString爲 「medicambo」 只是因爲數據被設置爲 「MD846A846」。

0

方法contains不適合查找子字符串,因爲它需要一個CharSequence對象而不是一個String對象。

在這種情況下,最好的選擇是從類String中替換indexOfcontains方法。