我应该做的是每当有人输入字符串而不是整数时,例如" 2",它应该说"你必须输入正数数据!& #34;而不是一堆错误消息。我想我已经找到了捕获声明,但我不确定是否要尝试。以下是我到目前为止的情况:
package loanpaymentfinder;
import java.text.NumberFormat;
import java.util.Scanner;
public class LoanPaymentFinder {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
NumberFormat num = NumberFormat.getCurrencyInstance();
double numInputLoan;
double numInputRate;
double numInputYears;
double numMonths;
double numRateSquared;
double numOutput;
double numRatePlusOne;
boolean finish = false;
while (true) {
//Input
System.out.print("Enter loan amount: ");
numInputLoan = Double.parseDouble(in.nextLine());
try {
} catch (NumberFormatException exception) {
System.out.println("You must enter positive numeric data!");
System.out.print("Would you like to calculate again (y/n):");
String input = in.nextLine();
if (input.equals("y")) {
continue;
} else if (input.equals("n")) {
break;
}
}
System.out.print("Enter rate: ");
numInputRate = Double.parseDouble(in.nextLine());
System.out.print("Enter number of years: ");
numInputYears = Double.parseDouble(in.nextLine());
//Checks for negitive inputs
if (numInputLoan <= 0) {
System.out.println("You must enter positive numeric data!");
System.out.print("Would you like to calculate again (y/n):");
String input = in.nextLine();
if (input.equals("y")) {
continue;
} else if (input.equals("n")) {
break;
}
} else if (numInputRate <= 0) {
System.out.println("You must enter positive numeric data!");
System.out.print("Would you like to calculate again (y/n):");
String input = in.nextLine();
if (input.equals("y")) {
continue;
} else if (input.equals("n")) {
break;
}
} else if (numInputYears <= 0) {
System.out.println("You must enter positive numeric data!");
System.out.print("Would you like to calculate again (y/n):");
String input = in.nextLine();
if (input.equals("y")) {
continue;
} else if (input.equals("n")) {
break;
}
} else {
//Math goes here
numMonths = 12 * numInputYears;
numInputRate = numInputRate / 1200;
numRatePlusOne = numInputRate + 1;
numRateSquared = Math.pow(numRatePlusOne, numMonths);
numOutput = numRateSquared / (numRateSquared - 1);
numOutput = numInputRate * numInputLoan * numOutput;
//Output
System.out.println("The mounthly payment is:");
System.out.println(num.format(numOutput));
System.out.print("Would you like to calculate again (y/n):");
String input = in.nextLine();
if (input.equals("y")) {
continue;
} else if (input.equals("n")) {
break;
}
}
}
}
}
答案 0 :(得分:3)
在try块中你放了一些可能出错的代码。你想尝试的东西。
请查看您添加的部分代码:
numInputLoan = Double.parseDouble(in.nextLine());
您想要将String解析为double,但是如果此字符串包含's',该怎么办? 它会出错,因为您无法将's'解析为double。 所以你应该尝试执行它,你可能会发现错误。
结论,移动numInputLoan = Double.parseDouble(in.nextLine());试试块。
答案 1 :(得分:1)
将numInputLoan = Double.parseDouble (in.nextLine());
放入try块。
您的代码必须
// Input
System.out.print("Enter loan amount: ");
try
{
numInputLoan = Double.parseDouble(in.nextLine());
}
in.nextLine()返回你在控制台中输入的内容,所以当你把它解析为Double时,如果它有字符串,它会给出NumberFormatException,所以这部分进入try。
并初始化numInputLoan
,否则会出现编译错误。
答案 2 :(得分:1)
您需要在try
块中添加的是将输入(String
)转换为integer
的实际尝试。与某些语言(如C#)相反,Java没有Int.TryParse(String s)
方法,因此解析的结果和后续处理应该包含在try
中,以便您可以处理错误的输入。
这就是为什么
numInputLoan = Double.parseDouble (in.nextLine());
应位于try
块中,以便在失败并抛出Exception
时,catch
块可以接管。
答案 3 :(得分:1)
这应该这样做;)
try
{
numInputLoan = Double.parseDouble (in.nextLine());
}
catch(...)
...
答案 4 :(得分:1)
try语句用于捕获程序执行时可能抛出的异常。每当使用可能引发异常的语句时,都应该使用try语句。这样,如果发生异常,程序不会崩溃。
在你的代码中,这个numInputLoan = Double.parseDouble (in.nextLine());
可能会抛出异常以避免程序崩溃,你应该将它保留在try
中,这样如果发生了重复,那么控制就会捕获并防止崩溃。使用这种方式
try
{
numInputLoan = Double.parseDouble (in.nextLine());
}
catch(Exception e)
{
}
答案 5 :(得分:0)
在try块中,您放置任何可能导致您正在检查的异常的内容。在这种情况下,由于您正在准备NumberFormatException,您可能希望至少包含您调用parseDouble
的语句。像这样:
try {
numInputLoan = Double.parseDouble (in.nextLine());
}