2012-02-23 118 views
1

我正在尝试编码贷款计算器。我似乎有问题。我正在尝试从用户那里获取输入并验证输入。我知道我做错了问题是我挠挠脑袋想知道如何做对。 我在d = getDouble(sc,提示符)上得到一条红线;和i = getInt(sc,提示符);我知道我没有正确编码。我只是不确定如何去修复它。Java贷款计算器

我也必须验证继续声明,我不确定最好的方式去做这件事,最后导师希望代码是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(); 

      }   
     } 
    } 
+0

getDouble编码,就好像它是一个方法,但有没有这样的方法这里定义。 – arcy 2012-02-23 02:55:16

回答

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变化,您的用户获得了”不会感到困惑:-)


我会留给你做一个整数输入类似的东西。这你的功课,毕竟:-)

+0

我在哪里放置该代码?它是否代替getDouble?那是我真正不明白的。上周我做了另一个项目,我全都在这个地方。我基本上有东西倒退,这真的把我搞砸了。 – 2012-02-23 02:53:00

+0

@Jeremy,我用一个完整的(虽然很小的)程序更新了答案,它说明了你需要做什么。我不会为你做太多的工作,因为这可能是课程作业,如果你用一点点的帮助来解决问题,你会感觉更好(有些人可能会说,更重要的是感觉更好,你会更好)。 – paxdiablo 2012-02-23 02:56:47

+0

所以你说我需要重写我的主,所以它更像你已经编码?我如何发送给我的验证器? – 2012-02-23 02:59:01

2

你尚未进行的执行你的getDouble(扫描仪,字符串)和getInt(扫描仪,字符串),这就是为什么你得到的红线。

既然你已经有了一台扫描仪,并提示字符串改成这样

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

和整数

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