1

私がやるべきことは、誰かが「2」などの整数の代わりに文字列を入力するときはいつでも、「正の数値データを入力する必要があります!」と言うべきです。一連のエラー メッセージの代わりに。私は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());

String を double に解析したいのですが、この文字列にたとえば 's' が含まれている場合はどうでしょうか。「s」を double に解析できないため、エラーが発生します。したがって、それを実行しようとすると、エラーが発生する可能性があります。

結論、移動 numInputLoan = Double.parseDouble (in.nextLine()); try ブロックに。

于 2013-10-27T15:01:02.360 に答える
1

プログラムの実行時にスローされる可能性のある例外をキャッチするには、try ステートメントを使用します。例外をスローする可能性のあるステートメントを使用するときはいつでも、try ステートメントを使用する必要があります。そうすれば、例外が発生してもプログラムがクラッシュしなくなります。

コードでは、これによりnumInputLoan = Double.parseDouble (in.nextLine());例外がスローされる可能性があるため、プログラムのクラッシュを回避するには、これを保持しtryて、例外が発生した場合に制御がキャッチされ、クラッシュが防止されるようにする必要があります。この方法を使用します。

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

tryブロック内に配置する必要があるのは、入力 ( String) をinteger. C# などの一部の言語とは対照的に、Java にはInt.TryParse(String s)メソッドがないため、解析の結果とその後の処理を で囲む必要がありますtry。これにより、誤った入力に対処できます。

それが理由です

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

try失敗して がスローされたときにExceptioncatchブロックが引き継ぐことができるように、ブロック内にある必要があります。

于 2013-10-27T15:01:11.727 に答える
1

これでうまくいくはずです;)

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

trynumInputLoan = Double.parseDouble (in.nextLine());ブロックに入れます。

あなたのコードは

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

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

in.nextLine()はコンソールで入力した内容を返すので、Doubleにパースすると文字列だとNumberFormatExceptionになるので、この部分はtryに入る。

numInputLoanそうしないと、コンパイルエラーが発生します。

于 2013-10-27T14:58:52.180 に答える