JAVA: Runtime Exception (я думаю, это то, что мне нужно использовать) - PullRequest
0 голосов
/ 01 марта 2012

Хорошо, мне нужна моя программа для проверки введенных пользователем данных. Если эти данные неверны, программе необходимо пропустить почти весь мой код и дойти до конца цикла while, чтобы спросить, не хочет ли пользователь продолжить вычисление другого кредита. Мой профессор не предоставил нам метод, чтобы сделать это, и вся информация, которую я нашел в Интернете, не достаточно конкретна, чтобы помочь мне. Еще раз, мне нужно пропустить код после проверки, не выходя из программы, и перейти к концу цикла, где я спрашиваю пользователя, хотят ли они рассчитать другой кредит. Вот мой код до сих пор.

        /*  This program is an extension of the previous Interest Calculator.  The only different is this one can
    compute not only simple interest but daily and monthly compound interest using a switch statement to
    differentiate each type of interest.    */

import javax.swing.*;
// Import the GUI methods
public class InterestCalculatorLoop {
    public static void main(String[] args) {
    // Entry point of program
        String again = "yes";
        while (again.equalsIgnoreCase("yes" ))
        {
            String option = JOptionPane.showInputDialog("Which type of loan would you like to find interest for? \n1 = Simple Interest \n2 = Monthly Compounded Interest \n3 = Daily Compounded Interest");
            int optionInt = Integer.parseInt(option);
            int interestType = Integer.parseInt(option);
            String paString = JOptionPane.showInputDialog("Enter the principal amount");
            double pa = Double.parseDouble(paString);
            double interest = 0;
            double months = 0;
            double totalInterest = 0;
            double years = 0;
            final double daysInYear = 365.0;
            final double daysInMonth = 30.41666666667;
            final double monthsInYear = 12.0;

            // Logic statements to validate user input or otherwise run through the rest of the program without calculation
            if (pa <= 0)
            {
                JOptionPane.showMessageDialog(null, "Data Error: The principal amount must be greater than zero.  You entered " + pa);
                return;
            }
            else
            {
                String interestString = JOptionPane.showInputDialog("Enter The Annual Interest Rate [1 - 100 percent]) ");
                interest = Double.parseDouble(interestString);
            }
                if (interest < 0 || interest > 100)
                {
                    JOptionPane.showMessageDialog(null, "Data Error: The interest amount must be between 1 and 100. You entered " + interest);
                    return;
                }
                else
                {
                    String monthsString = JOptionPane.showInputDialog("Enter the number of months");
                    months = Double.parseDouble(monthsString);
                }
                    if (months <= 0)
                    {
                        JOptionPane.showMessageDialog(null, "Data Error: The number of months must be above 0.  You entered " + months);
                        return;
                    }
                    else
                    {
                        switch (optionInt)
                        {
                        // Case for simple intrest
                        case 1: optionInt = 1;
                            months = months/monthsInYear;
                            totalInterest = pa * (interest/100.0) * months;
                            JOptionPane.showMessageDialog(null, "The total amount of interest of your loan is $" + totalInterest + ".");
                            break;

                        // Case for monthly compounded interest
                        case 2: optionInt = 2;
                            interest = interest/100.0;
                            years = months/monthsInYear;
                            double exponent = months*years;
                            double interestOverMonths = 1+interest/months;
                            double thirdTotal = Math.pow(interestOverMonths, exponent);
                            double secondTotal = pa*thirdTotal;
                            totalInterest = secondTotal - pa;
                            JOptionPane.showMessageDialog(null, "The total amount of interest of your loan is $" + totalInterest + ".");
                            break;

                        // Case for daily compounded interest
                        case 3: optionInt = 3;
                            interest = interest/100.0;
                            double days = months*daysInMonth;
                            years = days/daysInYear;
                            exponent = days*years;
                            double interestOverDays = 1+interest/days;
                            thirdTotal = Math.pow(interestOverDays, exponent);
                            secondTotal = pa*thirdTotal;
                            totalInterest = secondTotal - pa;
                            JOptionPane.showMessageDialog(null, "The total amount of interest of your loan is $" + totalInterest + ".");
                            break;
                        }
                    }
                    again = JOptionPane.showInputDialog("Would you like to compute another loan? (yes or no)");

        }

    }
}

Ответы [ 3 ]

1 голос
/ 01 марта 2012

Break очень полезен для остановки циклов, как вы и сказали.По сути, он имеет значение установки логического параметра цикла for в значение true.

Конечно, вы можете использовать то, что в CMD относится к GOTO.Вы можете создать что-то вроде:

top:
for(int i = 0; i < 10; i++){
  if(i == 9){
    break top;
  }
}
1 голос
/ 01 марта 2012

Я пролистал ваш код и, честно говоря, я мало что знаю о кредитах и ​​связанных с ними расчетах.

Поскольку вы, очевидно, все еще изучаете основы, простое решение повнешний вид этого будет выглядеть так:

while (again.equalsIgnoreCase("yes" ))
{

    /*
     * FROM HERE
     */
    String option = JOptionPane.showInputDialog("Which type of loan would you like to find interest for? \n1 = Simple Interest \n2 = Monthly Compounded Interest \n3 = Daily Compounded Interest");
    int optionInt = Integer.parseInt(option);

    //...

    /*
    *  TO HERE
    */
    again = JOptionPane.showInputDialog("Would you like to compute another loan? (yes or no)");

}

и поместить его в свой собственный метод, называемый, например:

public static void askAndProcessDetails()

Так что, когда вы return, вы перейдете кповторить диалог.

while (again.equalsIgnoreCase("yes" ))
{
    askAndProcessDetails();
    again = JOptionPane.showInputDialog("Would you like to compute another loan? (yes or no)");
}
0 голосов
/ 01 марта 2012

continue может быть одной из худших функций java с ключевым словом break (кроме операторов switch).Это приводит к Jigsaw-коду, где вы должны выяснить, где код прыгает.Один вариант продолжения может быть практичным, но изменить код, который он создает, становится очень сложно (подумайте о добавлении внутреннего цикла ...), а продолжение 2 приведет вас в бешенство.Избегайте использования продолжить, всегда есть другое решение.То же самое для перерыва.

Здесь, почему бы вам просто не использовать какой-то

if( answerIsValid ) {
  //process it
  ...
}//if

Это просто, просто, понятно и даже лучше, если у вас есть отдельный метод, содержащий обработку.1011 * Кроме того, в вашем случае, который связан с надежностью, вы можете предоставить метод process (), который выдает исключение, если введенные данные недопустимы.Это делает еще более очевидным, что существует «нормальное» поведение программы и множество странных случаев, которые вы обрабатываете как ошибки.

public void processAnswer( String stringAnswer ) throws ArithmeticException {
   int answer = Integer.parseInt( stringAnswer );
     //rest of processing
     ...
}//met

тогда ваш основной цикл становится

    String again = "yes";
    while (again.equalsIgnoreCase("yes" ))
    {
       String stringAnswer = JOptionPane...
       try {
         process( stringAnswer );
       } catch( ArithmeticException ex ) {
        JOptionPane.showMessageDialog( "This is not an integer !" );
       }//catch
    }//while
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...