![](/img/trans.png)
[英]How can i convert my if and else-if statements into a switch case?
[英]Can multiple if statements be associated with a single else clause without using else-if?
我有一種驗證方法,其中必須逐個檢查條件,然后相應地引發錯誤消息。
為此,我使用了多個if語句,並且如果所有條件都為false,則應該執行一個任務。
這是我的代碼:
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();
}
問題在於else語句僅與最后一個if語句相關聯,而前5個if語句獨立工作。
請注意,我不能使用else-ifs,因為應該驗證所有字段-例如,即使s3
無效,仍然必須驗證s6
。 因此,必須評估所有的if語句,而不管有多少個評估為true。
我怎么解決這個問題?
將多個if語句與同一個else語句關聯的唯一方法是使用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();
}
在所有if
語句中設置一個布爾標志。 如果發生錯誤,請將其設置為true
。
然后,將else
段替換為另一個if
語句,該語句僅在聲明的布爾標志為false時才執行。
您正在使用通用數據類型( String
)存儲值受某些要求約束的數據。 它降低了代碼的可維護性。
更好的方法是創建存儲數據的數據類型。 然后,該數據類型將具有您可以使用的其他驗證邏輯,例如,通過使用適當的邏輯來拒絕將該數據類型的值設置為違反您的規范的值。 這樣的數據類型的一個典范是Password
。 Password password = new Password("abcd");
如果您的規范指出密碼長度必須為5個或更多字符,則可能會引發異常。 此外,通過使構造函數在驗證后立即對其進行哈希處理,可以確保密碼僅在短時間內以純文本形式存在於內存中。
如果您使用的是Java EE,請參見javax.validation.Validator ,以獲取另一種方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.