我正在尝试编写贷款计算器。我似乎遇到了问题。我试图从用户获得输入并验证输入。我知道我做错了问题是我在摸不着头脑,想知道如何正确行事。 我在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();
}
}
}
答案 0 :(得分:2)
你还没有实现你的getDouble(Scanner,String)和getInt(Scanner,String),这就是你得到红线的原因。
因为您已经有扫描仪,并且提示字符串将其更改为
System.out.print(prompt);
d = sc.nextDouble();
和整数
System.out.print(prompt);
i = sc.nextInt();
答案 1 :(得分:0)
我认为getDouble
和getInt
是字符串函数,因此您必须首先获取字符串然后调用这些方法。但是,由于您有扫描仪,我假设您要使用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();
你有它,你已经提示用户并从中输入双精度数。第一行打印出提示,第二行使用扫描程序从用户获取输入。
另外,您对最小值和最大值的检查都很好,但您的错误消息的硬编码值为0
和100K
。我建议您使用参数来定制这些消息,例如更改:
System.out.println("Error! Number must be greater tha 0.0");
成:
System.out.println("Error! Number must be greater than " + min);
这样,如果将来min
或max
发生变化,您的用户就不会感到困惑: - )
我会让你为整数输入做类似的事情。毕竟 是你的作业: - )