2013-11-28 5 views
-1

У меня возникла проблема, когда я прошу пользователя высвободить сумму из своего баланса. У меня есть метод, называемый «убрать», и я передаю их баланс. Затем я хочу проверить, меньше ли сумма, которую они хотят снять, меньше их баланса. Если да, я хотел бы заставить пользователя повторить попытку.Исключение броска в Java

Пока он проверяет ввод, но я продолжаю получать выходные данные для каждой попытки.

public void withdraw (double balance) 
{ 
    System.out.println("How much would you like to withdraw?"); 
    double amount = keyboard.nextDouble(); 

    try 
    { 
     if(amount > balance) 
     { 
      throw new IncorrectWithdrawException(); 
     } 
    } 
    catch(IncorrectWithdrawException e) 
    { 
     System.out.println(e.getMessage()); 
     withdraw(balance);// keeps calling the method for a loop if they keep entering incorrect amount 
    } 
    balance = balance-amount; 
    System.out.println("You have withdrawn "+amount+ " and your new balance is " +balance); 
} 

Выход:

Что такое баланс? 100 Сколько вы хотите снять? 200 ------ ОШИБКА ------ Это не действительная сумма для снятия средств. Сколько вы хотели бы снять? 500 ------ ОШИБКА ------ Это не действительная сумма для снятия. Сколько вы хотели бы снять? 50

Вы отозвали 50,0 и ваш новый баланс 50,0 Вы отозвали 500,0 и ваш новый баланс -400,0 Вы отозвали 200,0 и ваш новый баланс -100,0

Я не хочу, последние два выходы ...

+0

Что именно ваша проблема ? – Kishore

+5

Вызов того же метода (рекурсивно) изнутри обработчика исключений? Теперь есть образец, который я раньше не видел ... – John3136

+0

Возможно ли, что вы начинаете с нулевого баланса? – Andrew

ответ

0

когда сумма> следующий входной баланс, вы перешли пользователя как новый баланс, который очень проблематично ... пользователь может обмануть баланс

0

Одно важное замечание:

вы должны проверить свой баланс, чтобы убедиться, что он больше или равен 0.

(Предположим, что вы не позволите отрицательный б alance случается.)

2

Не используйте исключения внутри методов как скрытый способ ниндзя, если/или условный код: это не то, для чего они предназначены. Исключения являются последней защитой от ненормальных условий, на которые нельзя иначе проверить. Ваш код имеет совершенно нормальное описание и совершенно нормальное поведение. Палка с нормальной if/then:

public void withdraw (double balance) 
{ 
    double amount; 
    do 
    { 
    System.out.println("How much would you like to withdraw?"); 
    amount = keyboard.nextDouble(); 
    if (amount > balance) 
    { 
     System.out.println("I'm sorry, you cannot overdraw, please pick a lower withdrawal amount."); 
    } 
    } 
    while(amount > balance); 

    // Although you probably want to say something like 
    // "or type 0 not to withdraw anything", to be nice. 

    balance = balance-amount; 
    System.out.println("You have withdrawn "+amount+ " and your new balance is " +balance); 
} 
+0

Я хочу использовать исключение. Я знаю, что это сработает таким образом – ThinkFast

+1

Это замечательно: не надо. Это не то, для чего нужны исключения, и я не собираюсь научить вас писать плохой код.Я * собираюсь сказать вам, чтобы вы не преподавали плохой код: узнайте, как все делается в Java. Это один из таких случаев. –

+0

:) Спасибо, проблема в том, что для того, чтобы программа выбрала исключение, если вы попытаетесь вывести больше денег, чем ваш баланс. – ThinkFast

Смежные вопросы