Java贷款计算器

时间:2012-02-23 02:42:50

标签: java

我正在尝试编写贷款计算器。我似乎遇到了问题。我试图从用户获得输入并验证输入。我知道我做错了问题是我在摸不着头脑,想知道如何正确行事。 我在d = getDouble(sc,提示符)上得到一个红线;和i = getInt(sc,提示);我明白我没有正确编码。我只是不确定如何修复它。

我还必须验证continue语句,我不确定最好的方法,最后教师希望代码为80行或更少,我对80行。我想我正在寻找一种更好的方法来做到这一点,但是新的我正在摸不着头脑,我希望有人能伸出援助之手。

一如既往,我非常感谢您的帮助。

   import java.util.Scanner;
   import java.text.NumberFormat;

    public class LoanCalculator
    {   
        public static double getDoubleWithinRange(Scanner sc, String prompt, double min, double max)
        {
          double d = 0.0;
          boolean isValid = false;
          while(isValid == false);
           {
                d = getDouble(sc, prompt);
                if (d <= min)
                   {
                   System.out.println("Error! Number must be greater tha 0.0");
                   }
                   else if (d >= max)
                  {
                     System.out.println("Error number must be less than 1000000.0");
                }
                else 
                    isValid = true;
            }
            return d;       
        }
            public static int getIntWithinRange(Scanner sc, String prompt, int min, int max)
        {
            int i = 0;
            boolean isvalid = false;
            while(isvalid == false)
             {
                i = getInt(sc, prompt);
                if (i <= min)
                       System.out.println("Error! Number must be more than 0");
                else if (i >= max)
                    System.out.println("Error! Number must be less than 100");
                else 
                    isvalid = true;
            }   
        }
          public static void main(String[] args)
         {
            System.out.println("Welcome to the loan calculator");
            Scanner sc = new Scanner(System.in);
            String choice = "y";
            while (choice.equalsIgnoreCase("y"))
            {
                System.out.println("DATA ENTRY");
                double loanAmount = getDoubleWithinRange(sc, "Enter loan amount: ", 0.0, 1000000.0);
                double interestRate = getDoubleWithinRange(sc, "Enter yearly interest rate: ", 0, 20);
                int years = getIntWithinRange(sc, "Enter number of years: ", 0, 100);
                int months = years * 12;

                double monthlyPayment = loanAmount * interestRate/
                        (1 - 1/Math.pow(1 + interestRate, months));

                NumberFormat currency = NumberFormat.getCurrencyInstance();
                NumberFormat percent = NumberFormat.getPercentInstance();
                percent.setMaximumFractionDigits(3);
                System.out.println("RESULST");
                System.out.println("Loan Amount" + currency.format(loanAmount));
                System.out.println("Yearly interest rate: " + percent.format(interestRate));
                System.out.println("Number of years: " + years);
                System.out.println("Monthly payment: " + currency.format(monthlyPayment));

                System.out.println();
                System.out.println("Continue? (y/n): ");
                choice =sc.next();
                System.out.println();

            }           
        }
    }

2 个答案:

答案 0 :(得分:2)

你还没有实现你的getDouble(Scanner,String)和getInt(Scanner,String),这就是你得到红线的原因。

因为您已经有扫描仪,并且提示字符串将其更改为

System.out.print(prompt);
d = sc.nextDouble();

和整数

System.out.print(prompt);
i = sc.nextInt();

答案 1 :(得分:0)

我认为getDoublegetInt是字符串函数,因此您必须首先获取字符串然后调用这些方法。但是,由于您有扫描仪,我假设您要使用nextXXX方法:

Scanner sc = new Scanner (System.in);
double d = sc.nextDouble();

您可以将此完整代码段用于教育目的:

import java.util.Scanner;
class Test {
    public static void main (String args[]) {
        Scanner sc = new Scanner (System.in);

        System.out.print("Enter your double: ");
        double d = sc.nextDouble();

        System.out.print("Enter your integer: ");
        int i = sc.nextInt();

        System.out.println("You entered:  " + d + " and " + i);
    }
}

文稿:

Enter your double: 3.14159
Enter your integer: 42
You entered:  3.14159 and 42

基本上,过程是:

  • 使用标准输入流实例化扫描程序。
  • 使用print作为提示。
  • 使用扫描仪nextXXX方法获取输入值。

根据您的意见,在此提供更多帮助。

在您的主要功能中,您有:

double loanAmount = getDoubleWithinRange(sc, "Enter loan amount: ", 0.0, 1000000.0)

并且该函数具有原型:

public static double getDoubleWithinRange(
    Scanner sc, String prompt, double min, double max)

这意味着原型中的那些变量将被设置为来自调用的值。因此,为了提示信息,您可以使用类似的东西(这是替换d = getDouble(sc, prompt);行):

System.out.print(prompt);
double d = sc.nextDouble();

你有它,你已经提示用户并从中输入双精度数。第一行打印出提示,第二行使用扫描程序从用户获取输入。

另外,您对最小值和最大值的检查都很好,但您的错误消息的硬编码值为0100K。我建议您使用参数来定制这些消息,例如更改:

System.out.println("Error! Number must be greater tha 0.0");

成:

System.out.println("Error! Number must be greater than " + min);

这样,如果将来minmax发生变化,您的用户就不会感到困惑: - )


我会让你为整数输入做类似的事情。毕竟 是你的作业: - )

相关问题