2012-11-18 4 views
-1

예외를 처리하는 명령문을 포함해야하지만 변수를 변경할 때 변수가 변경되지 않습니다. 도움?변수가 변경되지 않습니다.

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가 예외를 throw하면 변경해야합니까? 즉, 무언가 잘못되었음을 의미합니까? – dchhetri

+0

무엇을 묻는거야? 당신이하려고하는 것을 정교하게, 당신이 기대하고있는 것, 당신을 혼란스럽게하는 것. – EdC

답변

4

이 문제를 해결하기 위해 재귀를 사용해야합니까? 반환 값을 반환하기 전에 amount 변수에 반환 된 값을 지정하지 않았으므로이 작업을 수행해야한다고해도 재귀 호출은 잘못되었습니다. 즉,

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 루프 시도를 원래 게시물의 수정으로 표시하고 올바르게 작동하도록 도울 수 있는지 확인하십시오. –

관련 문제