2012-11-18 149 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循环尝试,作为对原始帖子的修改,并让我们看看我们是否可以帮助您正确使用它。 –