2011-06-08 28 views
0

所以基本上我有這個if語句:真糊塗就如何從提取值,如果聲明

int md; // md = marriage deduction 
    if (married == 'M'){ 
    md = 750; 
    System.out.println("Deduction for Being Married: " + md); 
    } 
    else if (married == 'S'){ 
    md = 500; 
    System.out.println("Deduction for Being Single: " + md); 
    } 

,我真的很困惑如何基本上從if語句提取MD的值。我必須,在if語句之後,根據md的值計算另一個整數,但是當我嘗試這樣做時,md是未定義的並顯示爲錯誤。就像這樣:

int total = balance - md - ad 

平衡和廣告的工作很好,因爲我沒有,如果他們語句中使用,但MD不會有一個值。該錯誤說,它是未定義的,因爲我從未初始化它在if語句之外,我只是想知道如何從if語句中獲取md的值。非常感謝你的幫助。

回答

5

md是不確定的,因爲當你宣佈,你不要設定它的價值。如果married不是MS,則md未定義。否則,md應保留您分配的任何值,因爲它不在if語句的範圍之內。

只需添加一個else條款設置md爲零:

if (married == 'M') 
{ 
    md = 750; 
    System.out.println("Deduction for Being Married: " + md); 
} 
else if (married == 'S') 
{ 
    md = 500; 
    System.out.println("Deduction for Being Single: " + md); 
} 
else 
{ 
    md = 0; 
    // TODO: System.out.println("Oops. You are neither married nor single."); 
} 

或者,你可以只初始化md爲零。我建議做兩個:

int md = 0; 
+0

謝謝你的幫助。我一直在寫這段代碼,這幾乎是我第一次陷入困境。除了那些剛剛說過「這是錯誤的閹割」的人以外,所有回答的人都非常感謝。 – MikesBadAtJava 2011-06-08 19:26:28

1

您對已婚的價值幾乎肯定不是M或S,因此您沒有觸及您的賬單分支,而且md也沒有被定義。

+0

這是錯誤的遺憾,因爲之前我把它這樣,除非用戶的輸入M或S表示結婚程序結束的探索,我得到的答案已經雖然所以謝謝你的嘗試。 – MikesBadAtJava 2011-06-08 19:30:25

+2

我想你可能是錯的,看到你選擇的答案也只能解決'結婚'既不是'M'也不是'S'的情況。無論如何,我會對定義與宣言進行一些研究,以避免將來出現類似問題。正如@Justin提到的,你聲明'md',但從來沒有真正定義它。 – Robotica 2011-06-08 19:37:45

+1

Robotica是對的。雖然你可能知道else分支不可能被執行,但編譯器並不那麼明亮。它對if分支做了一個簡單的分析,並檢測到md可能不會被初始化。它不會回溯你的代碼來檢查是否會出現這種情況。 – Dunes 2011-06-08 20:29:47

1

如果已婚不是'M'或'S',那麼md將是未定義的。

+0

orly?我知道,應該是這樣的。如果它不是M或S,那麼程序就會結束,儘管如此,這在代碼的早期部分中還是有的。 – MikesBadAtJava 2011-06-08 19:29:35

1

您有一個條件,其中married既不是S也不是M ...所以添加最後的else將其設置爲零。

if (married == 'M'){ 
md = 750; 
System.out.println("Deduction for Being Married: " + md); 
} 
else if (married == 'S'){ 
md = 500; 
System.out.println("Deduction for Being Single: " + md); 
} 
else { 
md = 0; 
} 

或者做之前,整個if語句...

或者你有小寫sm其失敗的情況下敏感狀況

+0

謝謝你,我已經從別人那裏得到了它,但是感謝你的幫助 – MikesBadAtJava 2011-06-08 19:28:58

+0

@ user789753:習慣於查看答案的時間戳,看看誰回答正確*首先* ..然後接受/ upvote – gbn 2011-06-08 19:29:55

+0

這就是我所做的.. Justin Satyr給了我幾乎相同的答案,在你之前1分鐘解決了我的問題。 – MikesBadAtJava 2011-06-08 19:35:53

1

假設這是我們正在談論和JAVA結婚是一個String對象,您應該使用.equalsTo對它們進行比較:

if (married.equalsTo("M")) {... 
+0

似乎'結婚'不是'String'對象,而是一個原始'char',正如OP選擇M'周圍的單引號所示。此外FYI的語言被稱爲「Java」,而不是「JAVA」...這是一種令人興奮的語言,但不是那麼令人興奮,我們喊它的名字:) – 2011-06-08 20:36:25

2

我的adendum增加這些答案。

if (married == 'M') { 
    md = 750; 
    System.out.println("Deduction for Being Married: " + md); 
} else if (married == 'S') { 
    md = 500; 
    System.out.println("Deduction for Being Single: " + md); 
} else { 
    md = 0; 
    // what if we later add functionality to add divorced or widowed? 
    // would this really be the desired functionality to set md to 0 
    // better to throw an exception saying we don't recognise the value of married 
    // eg. 
    throw new IllegalStateException("unrecognised married state: "+married); 
} 

或者你可能想用枚舉

public enum Married { 

    M("married", 750), 
    S("single", 500); 

    private String name; 
    private int points; 

    Married(String name, int points) { 
     this.name = name; 
     this.points = points; 
    } 

    public String getName() { return name; } 
    public int getPoints() { return points; } 

} 

String input = // get input somehow 

Married status = Married.valueOf(input); 
// status is either M or S now. It cannot be null as valueOf throws an exception if it 
// cannot match the input to string to any of the possible values of the enum 

int total = balance - status.getPoints() - ad;