我有一种验证方法,在该方法中我必须一一检查条件,然后相应地抛出错误消息。
为了实现这一点,我使用了多个 if 语句,如果所有条件都为假,我应该执行一个任务。
这是我的代码:
if(s1.equals("") || s2.equals("") || s3.equals("") || s4.equals("") || s5.equals("") || s6.equals(""))
Toast.makeText(getApplicationContext(),"Enter all Details first", Toast.LENGTH_SHORT).show();
if(!s5.matches("[A-Za-z0-9]+"))
e5.setError("Username cannot contain special characters");
if(s5.length()<6)
e5.setError("Username must be a minimum of 6 characters.");
if(!(s3.contains("@")&& s3.contains(".")))
e3.setError("Enter a valid Email Id");
if(!s6.equals(s7))
e7.setError("Passwords dont match");
if(s2.length()!=10)
e2.setError("Please enter a valid 10 digit number");
else
{
Validate v2=new Validate();
v2.store_values(s1,s2,s3,s4,s5,s6,s8);
v2.execute();
}
Run Code Online (Sandbox Code Playgroud)
问题是 else 语句只与最后一个 if 语句相关联,而前 5 个 if 语句独立工作。
请注意,我不能使用 else-ifs,因为所有字段都应该被验证——例如,即使s3是无效的,也s6必须被验证。因此,必须评估所有 if 语句,无论有多少条语句被评估为真。
我怎么解决这个问题?
将多个 if 语句与同一个 else 语句关联的唯一方法是 using if-else-if...else,这不是您所需要的,因为您希望评估所有 if 语句,并且if-else-if...else只会评估 if 语句,直到其中一个被评估为 true .
相反,您可以使用将输入标记为无效的标志(布尔变量)并使用它代替 else 语句来确定输入是否有效。
boolean valid = true;
if(s1.equals("") || s2.equals("") || s3.equals("") || s4.equals("") || s5.equals("") || s6.equals("")) {
Toast.makeText(getApplicationContext(),"Enter all Details first", Toast.LENGTH_SHORT).show();
valid = false;
}
if(!s5.matches("[A-Za-z0-9]+")) {
e5.setError("Username cannot contain special characters");
valid = false;
}
if(s5.length()<6) {
e5.setError("Username must be a minimum of 6 characters.");
valid = false;
}
if(!(s3.contains("@")&& s3.contains("."))) {
e3.setError("Enter a valid Email Id");
valid = false;
}
if(!s6.equals(s7)) {
e7.setError("Passwords dont match");
valid = false;
}
if(s2.length()!=10) {
e2.setError("Please enter a valid 10 digit number");
valid = false;
}
if (valid) {
Validate v2=new Validate();
v2.store_values(s1,s2,s3,s4,s5,s6,s8);
v2.execute();
}
Run Code Online (Sandbox Code Playgroud)