2015-05-16 59 views
-2

這可能是更壞的問題,但似乎沒有爲我工作,我有這樣的Parse.com數據庫(由其他人創建):如果別人在for循環的Android

enter image description here

現在我必須把一些驗證:

如果用戶所在的城市,並與數據庫的價值用戶的狀態,比賽的費用將是30

如果用戶的狀態的比賽,但不是城市的成本將是50 否則成本會100

我寫這篇文章的代碼:

if (ClientList.size() > 0) { 
    for (int i = 0; i < ClientList.size(); i++) { 
     final ParseObject p = ClientList.get(i); 
     String state = p.getString("State"); 
     String city = p.getString("City"); 
     float cost = Float.parseFloat(p.getString("CostInPrecentage")); 
     if(stateDeli.equalsIgnoreCase(state) && cityDeli.equalsIgnoreCase(city)) { 
      shippingCost = cost; 
     } else if(stateDeli.equalsIgnoreCase(state) && !cityDeli.equalsIgnoreCase(city)) { 
      shippingCost = cost; 
     } else { 
      shippingCost = cost; 
     } 
    } 
} 

這總是返回我的運輸成本= 100

我想,如果別的

if(stateDeli.equalsIgnoreCase(state)) { 
    if(cityDeli.equalsIgnoreCase(city)) { 
     shippingCost = cost; 
    } else { 
     shippingCost = cost; 
    } 
} else { 
    shippingCost = cost; 
} 

這也返回我的運輸成本= 100

改變

如果我這樣做soemthig:

if(stateDeli.equalsIgnoreCase(state) && cityDeli.equalsIgnoreCase(city)) { 
    shippingCost = cost; 
    break; 
} else if(stateDeli.equalsIgnoreCase(state) && !cityDeli.equalsIgnoreCase(city)) { 
    shippingCost = cost; 
    break; 
} else { 
    shippingCost = cost; 
} 

它適用於默認和狀態,但不是我匹配狀態和城市的情況。

除了這些,我嘗試了許多休息的條件也似乎沒有完美的工作。 你能否建議如何驗證這一點。

最後我總算是這樣的條件:

if (stateDeli.equalsIgnoreCase(state)&&cityDeli.equalsIgnoreCase(city)) { 
             shippingCost = cost; 
             break; 
             } 
             else if (stateDeli.equalsIgnoreCase(state) && ((city == null || city =="" || "Default".equalsIgnoreCase(city)))) { 

            shippingCost = cost; 
            break; 
             } 
             else if("Default".equalsIgnoreCase(city) && "Default".equalsIgnoreCase(state)){ 

             shippingCost = cost; 
             break; 
             } 
+0

你的情況是正確的。確保值是正確的,這樣做放置一個斷點並檢查值。 – Rustam

+0

你有沒有嘗試在前兩個'if-else'條件中添加'break'? –

+0

是的,我嘗試了休息,也沒有正常工作 –

回答

-1

如果後的最低運輸成本,那麼你就需要保證較高的運輸成本將不會覆蓋較低的運輸成本。

if (ClientList.size() > 0) { 
    for (int i = 0; i < ClientList.size(); i++) { 
    final ParseObject p = ClientList.get(i); 
    String state = p.getString("State"); 
    String city = p.getString("City"); 
    float cost = Float.parseFloat(p.getString("CostInPrecentage")); 

    //if (cost < shippingCost) { // There could be an improvement, otherwise don't try! 
     if (stateDeli.equalsIgnoreCase(state) && cityDeli.equalsIgnoreCase(city)) { 
     shippingCost = cost; 
     break; 
     } 
     else if (stateDeli.equalsIgnoreCase(state) && !cityDeli.equalsIgnoreCase(city)) { 
     shippingCost = cost; 
     break; 
     } 
     else if (!stateDeli.equalsIgnoreCase(state) && !cityDeli.equalsIgnoreCase(city)) { 
     shippingCost = cost; 
     break; 
     } 
    //} 
    } 
} 

編輯:答案已更新爲使用休息。

+0

實際上我想要相應的值,它可以是任何最小最大或任何值..所以這個概念將不會工作 –

+0

因此,只要'shippingCost'設置爲一個有意義的值;然後返回這個值? –

+0

我試着用中斷,檢查我的編輯..它適用於相同的狀態和默認值,但不匹配(狀態和城市都) –