【问题标题】:if else inside for loop androidif else 在for循环android中
【发布时间】:2015-05-16 05:22:18
【问题描述】:

这可能是一个更糟糕的问题,但似乎对我没有任何用处,我在 Parse.com 中有一个这样的数据库(由其他人创建):

现在我必须进行一些验证:

如果用户的城市和用户的状态与数据库的值匹配,则成本将为 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

如果我这样做:

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

它适用于默认和州,但不适用于同时匹配州和城市的情况。

除了这些,我尝试了许多带有 break 的条件,似乎没有什么能完美地工作。 您能否建议如何验证这一点。

最后我管理了这样的条件:

 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;
                                      }

【问题讨论】:

  • 您的情况是正确的。确保值是正确的,这样做放一个断点并检查值。
  • 您是否尝试在前两个if-else 条件中添加break
  • 是的,我尝试了中断,但也无法正常工作
  • 您的 shippingCost 变量在哪里?在 for or 的内部?
  • 不,这是循环外的类变量,我也尝试了循环内的变量..

标签: java android if-statement for-loop


【解决方案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;
      }
    //}
  }
}

编辑:答案已更新为使用中断。

【讨论】:

  • 实际上我想要各自的值,它可以是任何最小最大值或任何值..所以这个概念不起作用
  • 所以只要将shippingCost 设置为一个有意义的值;然后返回这个值?
  • 我用 break 试过了,检查我的编辑 .. 它适用于相同的州和默认值,但不适用于匹配(州和城市)
猜你喜欢
  • 2017-08-02
  • 2019-12-04
  • 2012-11-13
  • 2021-09-16
  • 2019-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多