2012-02-23 108 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();