[英]Java conditional statement/ initializing variable
當前這是我的代碼,當用戶未選擇A,B,C,D,E或F作為選擇時,我需要顯示“請輸入有效的選擇”。 問題是如果我在“ else”條件上加上“請輸入一個有效的...”語句,Java會要求我初始化變量ActivityFactor,因為如果用戶未選擇正確的選擇就不會有變量。 有人知道我該如何解決嗎? 還是有任何想法我應該如何編寫程序來做到這一點?
if((inGender.equalsIgnoreCase("M") ||(inGender.equalsIgnoreCase ("F"))) && inActivity.equalsIgnoreCase("A"))
ActivityFactor = 1.0;
else if ((inGender.equalsIgnoreCase("M") ||(inGender.equalsIgnoreCase ("F"))) && inActivity.equalsIgnoreCase("B"))
ActivityFactor = 1.3;
else if (inGender.equalsIgnoreCase("M") && inActivity.equalsIgnoreCase("C"))
ActivityFactor = 1.6;
else if (inGender.equalsIgnoreCase("F") && inActivity.equalsIgnoreCase("C"))
ActivityFactor = 1.5;
else if (inGender.equalsIgnoreCase("M") && inActivity.equalsIgnoreCase("D"))
ActivityFactor = 1.7;
else if (inGender.equalsIgnoreCase("F") && inActivity.equalsIgnoreCase("D"))
ActivityFactor = 1.6;
else if (inGender.equalsIgnoreCase("M") && inActivity.equalsIgnoreCase("E"))
ActivityFactor = 2.1;
else if (inGender.equalsIgnoreCase("F") && inActivity.equalsIgnoreCase("E"))
ActivityFactor = 1.9;
else if (inGender.equalsIgnoreCase("M") && inActivity.equalsIgnoreCase("F"))
ActivityFactor = 2.4;
else if (inGender.equalsIgnoreCase("F") && inActivity.equalsIgnoreCase("F"))
ActivityFactor = 2.2;
else
{
ActivityFactor = -1;
}
//After
if(ActivityFactor != -1){
tdee = (nBMR * ActivityFactor);
System.out.println(tdee);}
else
{ System.out.println("Please enter a valid choice");
}
如果if語句中的所有條件都不為true,則您不會為ActivityFactor
分配任何內容,並且在double TDEE = (nBMR * ActivityFactor);
行中使用時不會對其進行初始化double TDEE = (nBMR * ActivityFactor);
。
您可以在此處顯示的代碼之前對其進行初始化,在最后一種情況下為其提供默認值,或者循環直到獲得有效值。
可以在循環之前初始化變量,或者將整個循環放入函數中,然后執行以下操作:
double TDEE = (nBMR * getActivityFactor());
另外,看看這個: http : //docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html
祝您編碼愉快! ;)
在有條件之前將ActivityFactor初始化為通常的值。
例如,您可以這樣做:
// knowing that it can never be -1
// so if that value remains, you know that user entered wrong letter
ActivityFactor = -1
// then the conditional begins
if((inGender.equalsIgnoreCase("M") ||(inGender.equalsIgnoreCase ("F"))) && inActivity.equalsIgnoreCase("A"))
...
// after conditional...
if(activityFactor != -1){
double TDEE = (nBMR * ActivityFactor);
}
順便說一句,我建議您使用“ activityFactor”而不是ActivityFactor。
您應該做兩件事:
您可以解決此問題並拋出將捕獲的異常。
private double getTDEE (String inGender, String inActivity) {
//logic
else {
throw new IllegalArgumentException("Please enter a valid choice");
}
return (nBMR * ActivityFactor);
}
如您所知,代碼的問題在於無論用戶是否輸入有效輸入,執行都會繼續。 因此,需要進行大量的重構-我還將嘗試使條件語句更漂亮。 但這是個人喜好。
可能的解決方案:
a)使用循環 -當用戶輸入令人滿意的輸入時,退出循環。
while( true ){
/* get input from the user */
/* run through validation checks...
and -break- out of the loop when they're satisfied */
}
/* do calculations here */
b)使用一個函數將所有這些邏輯抽象化..(如Psyclops建議)
就我個人而言,我將使用這些方法的組合-將所有這些邏輯提取到一個函數中,當未輸入有效輸入時該函數將返回false,然后使用while(! yourFunction() )
來簡單地遍歷它直到完成 您可以使用按引用傳遞來避免必須將返回類型用於布爾值以外的任何值。
我不會在循環之前初始化變量! 這只是意味着程序將繼續執行; 但是它里面沒有任何合適的數據-這可能比剛崩潰的應用程序還要糟糕。
我還沒有完全以代碼的形式給您答案-但希望它是一個起點,讓您考慮如何從概念上構成/設計這樣的解決方案。 通常,這是最困難的部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.