【问题标题】:How can I check the below conditions in switch instead of if?如何在 switch 而不是 if 中检查以下条件?
【发布时间】:2015-04-09 03:24:19
【问题描述】:

如何在 switch 而不是 if 中检查以下条件?

我想在 switch case 中检查这个条件。

if(tvStartLocation.getText().toString().equalsIgnoreCase(""))
{
    Toast.makeText(getActivity(),"Please enter start location", Toast.LENGTH_SHORT).show();
}
else if(tvEndLocation.getText().toString().equalsIgnoreCase(""))
{
    Toast.makeText(getActivity(),"Please enter end location", Toast.LENGTH_SHORT).show();
}
else if(etStartOdometer.getText().toString().equalsIgnoreCase(""))
{
    Toast.makeText(getActivity(),"Please enter Trip Start Odometer reading", Toast.LENGTH_SHORT).show();
}
else if(etEndOdometer.getText().toString().equalsIgnoreCase(""))
{
    Toast.makeText(getActivity(),"Please enter Trip End Odometer reading", Toast.LENGTH_SHORT).show();
}
else if((compareOdometerReading(etStartOdometer.getText().toString(),etEndOdometer.getText().toString())) == -1)
{
    Toast.makeText(getActivity(),"End Odometer reading should be greater than Start Odometer Reading (eOR > sOR)!", Toast.LENGTH_SHORT).show();
}
else if(etManifest.getText().toString().equalsIgnoreCase(""))
{
    Toast.makeText(getActivity(),"Please enter Manifest", Toast.LENGTH_SHORT).show();
}
else if(etShipper.getText().toString().equalsIgnoreCase(""))
{
    Toast.makeText(getActivity(),"Please enter Shipper", Toast.LENGTH_SHORT).show();
}
else if(etCommodity.getText().toString().equalsIgnoreCase(""))
{
    Toast.makeText(getActivity(),"Please enter Commodity", Toast.LENGTH_SHORT).show();
}

提前向我推荐伙计

【问题讨论】:

  • 你不能。您正在将一堆不同的变量与一个常数进行比较。开关用于将一个变量与一堆常量进行比较。但是,您可以将if 条件简化为...getText().isEmpty(),假设getText() 无论如何都会返回String
  • 你需要 Java 1.7!您的用例仍然不允许使用相同的用例!为了减少你的 if else 链,我建议你通过this
  • 你不是在比较同一个字符串。

标签: java android


【解决方案1】:

在 switch 语句中,您将一个变量与不同的常量值进行比较。您想将不同的变量与一个常数值进行比较。 这是不可能的,恕我直言,在您的情况下没有意义。

【讨论】:

  • Java 1.7 使得在字符串上使用 switch 成为可能。
  • @Skynet 仅当案例是 constant 字符串时。
  • 是的,针对字符串常量。他只有一个字符串常量:“”,但是他要检查的不同变量的列表。
  • @khelwood 我支持你 :) 另外值得注意的是,Android 目前仅支持 Java 1.5 和 1.6。我也会按照您的建议使用 isEmpty()。
【解决方案2】:

正如其他人提到的,您正在将多个变量与一个常量进行比较,而 switch 无法做到这一点。但是您可以通过将所有这些变量放入数组或列表中然后对其进行迭代来提高代码的重用性和可读性。例如这样的:

TextView[] toValidate = new TextView[]{tvStartLocation, tvEndLocation, etStartOdometer}; //etc

for(TextView tv : toValidate){
     if(tv.getText().toString().equalsIgnoreCase(""))
     {
          //Display message.. 
     }
}

【讨论】:

    【解决方案3】:

    您不能用 switch 语句替换它们,因为每个条件检查不同的变量。您可以将它们替换为方法,以避免代码重复。

    public boolean testControl (EditText control, String name) { // I'm assuming your control is an EditText 
                                                  // (perhaps I got the type wrong)
        if (control.getText().toString().equalsIgnoreCase("")) {
            Toast.makeText(getActivity(),"Please enter " + name, Toast.LENGTH_SHORT).show();
            return false;
        }
        return true;
    }
    

    你可以调用方法:

    boolean hasValue = testControl (etShipper, "Shipper");
    

    然后,如果您将EditText 控件存储在某个数组/集合中,则可以循环调用此方法。

    【讨论】:

      猜你喜欢
      • 2019-07-03
      • 2016-09-24
      • 2023-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      相关资源
      最近更新 更多