2012-11-18 180 views
-1

我必須確保包含處理異常的語句,但是當我這樣做時,變量Amount不會改變。幫幫我?變量不會改變

public static void main(String[] args){ 
    AmwayTickets run = new AmwayTickets(); 
    System.out.print(run.ticketAmount()); 
} 

public int ticketAmount(){ 
    System.out.println("Enter the amount of tickets you wish to purchase: "); 
    int amount = 0; 
    try { 
     amount = keyboard.nextInt(); 
    } 
    catch (InputMismatchException e){ 
     System.out.println("Invalid Amount"); 
     ticketAmount(); 
     return amount; 
    } 
    if (amount < 0){ 
     System.out.println("Invalid Amount"); 
     ticketAmount(); 
     return amount; 
    } 
    return amount; 
} 
+0

你想讓它改變嗎?如果nextInt拋出一個異常,它是否應該改變,意味着出了什麼問題? – dchhetri

+0

你在問什麼?詳細說明你想要做什麼,你期望什麼,什麼讓你困惑。 – EdC

回答

4

你確定應該使用遞歸來解決這個問題嗎?即使您應該這樣做,您的遞歸調用也是錯誤的,因爲您在返回金額前沒有將返回的值分配給金額變量。即,

amount = ticketAmount(); // note the difference 
    return amount; 

或者更簡單還是:

return ticketAmount(); 

但我建議你不要這樣做。如果這是我的代碼,我會用一個簡單的while循環代替。

boolean amountCorrect = false; 
while (!amountCorrect) { 
    try { 
     // try to get an assign amount 
     // if successful, assign amountCorrect = true; on the next line 
    } catch (InputMismatchException e) { 
     // give error warning here 
    } 
} 
+0

由於某種原因,while循環對我不起作用......我一定沒有把它做對。第一個建議很有效,但非常感謝! – user1695758

+0

@ user1695758:第一個建議是不好的,只是爲了告訴你爲什麼你的代碼不工作,但不是我推薦你做的事。請向我們展示您的while循環嘗試,作爲對原始帖子的修改,並讓我們看看我們是否可以幫助您正確使用它。 –