1

我应该做的是每当有人输入字符串而不是整数时,例如“二”,它应该说“您必须输入正数数据!” 而不是一堆错误消息。我想我已经弄清楚了 catch 语句,但我不确定是否可以尝试。这是我到目前为止所拥有的:

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;
                }
            }
        }
    }
}
4

6 回答 6

3

在 try 块中,您放置了一些可能出错的代码。你想尝试的东西。

查看您添加的此部分代码:

numInputLoan = Double.parseDouble (in.nextLine());

你想将一个字符串解析为一个双精度,但是如果这个字符串包含一个“s”呢?它给出了一个错误,因为您无法将“s”解析为双精度。所以你应该尝试执行它,你可能会发现一个错误。

结论,移动 numInputLoan = Double.parseDouble(in.nextLine()); 到 try 块。

于 2013-10-27T15:01:02.360 回答
1

放入numInputLoan = Double.parseDouble (in.nextLine());try块。

您的代码必须是

// Input
    System.out.print("Enter loan amount: ");

    try
    {
        numInputLoan = Double.parseDouble(in.nextLine());
    }

in.nextLine() 返回你在控制台输入的内容,所以当你解析为 Double 时,如果它有字符串,它会给出 NumberFormatException,所以这部分进入尝试。

并初始化numInputLoan,否则你会得到编译错误。

于 2013-10-27T14:58:52.180 回答
1

您必须放入try块中的是实际尝试将输入 ( String) 转换为integer. 与 C# 等某些语言相反,Java 没有Int.TryParse(String s)方法,因此解析的结果和后续处理应包含在 a 中try,以便您可以处理错误输入。

这就是为什么

numInputLoan = Double.parseDouble (in.nextLine());

应该在try块中,这样当它失败并抛出一个Exception时,catch块可以接管。

于 2013-10-27T15:01:11.727 回答
1

这应该这样做;)

    try
    {
       numInputLoan = Double.parseDouble (in.nextLine());
    }
    catch(...)
    ...
于 2013-10-27T15:04:07.550 回答
1

try 语句用于捕获程序执行时可能引发的异常。每当您使用可能引发异常的语句时,都应该使用 try 语句。这样,如果发生异常,您的程序就不会崩溃。

在您的代码中,这numInputLoan = Double.parseDouble (in.nextLine());可能会引发异常,因此为避免使您的程序崩溃,您应该保留它,try以便如果发生异常,则控制会去捕获并防止崩溃。使用这种方式

try
{
numInputLoan = Double.parseDouble (in.nextLine());
}
catch(Exception e)
{
}
于 2013-10-27T15:11:16.210 回答
0

在 try 块中,您放置了任何可能导致您正在检查的异常的内容。在这种情况下,由于您正在为 NumberFormatException 做准备,您可能希望至少包含您调用的语句parseDouble。像这样:

try {
    numInputLoan = Double.parseDouble (in.nextLine());
}
于 2013-10-27T15:00:25.000 回答