Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在开关中检查以下条件而不是if?_Java_Android - Fatal编程技术网

Java 如何在开关中检查以下条件而不是if?

Java 如何在开关中检查以下条件而不是if?,java,android,Java,Android,如何在开关中检查以下条件而不是if 我想检查开关箱中的这种情况 if(tvStartLocation.getText().toString().equalsIgnoreCase("")) { Toast.makeText(getActivity(),"Please enter start location", Toast.LENGTH_SHORT).show(); } else if(tvEndLocation.getText().toString().equalsIgnoreCase(

如何在开关中检查以下条件而不是if

我想检查开关箱中的这种情况

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

提前给我提建议

在switch语句中,将一个变量与不同的常量值进行比较。您希望将不同的变量与一个常量值进行比较。
这是不可能的,而且IMHO在您的案例中没有意义。

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

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

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

不能用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
控件存储在某个数组/集合中,则可以在循环中调用此方法。

不能。您正在将一组不同的变量与一个常量进行比较。开关用于将一个变量与一组常量进行比较。但是,您可以将
if
条件简化为
…getText().isEmpty()
,假设
getText()
返回一个
字符串。您需要Java 1.7来实现这一点!您的用例仍然不允许使用相同的!为了减少if-else链,我建议您不要比较同一个字符串。Java 1.7允许使用“打开字符串”。@Skynet仅在大小写为常量字符串时使用。是的,针对字符串常量。他只有一个字符串常量:“,但他想检查一系列不同的变量。@khelwood I second you:”)同样值得注意的是,ANdroid目前只支持Java 1.5和1.6。我还会按照您的建议再次使用isEmpty()。