什么放入试块?

时间:2013-10-27 14:56:43

标签: java try-catch

我应该做的是每当有人输入字符串而不是整数时,例如" 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;
                }
            }
        }
    }
}

6 个答案:

答案 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());
}