0

Javaに関しては、私はまったくの初心者です。私がこれまでに知っていることは、大学でのソフトウェア開発クラスから学んだことです。私は自分でそれをいじっていましたが、入力として 2 つの double を取り、ユーザーの BMI (体格指数) を計算するアプリを作成することができました。

このプログラムは正常に動作し、やりたいことを正確に実行しますが、ユーザーが何も入力せずに Enter キーを押すと、例外がスローされます。ユーザーが数値以外を入力すると、例外がスローされます。例外がスローされると、プログラムは停止します。これらの例外がプログラムを完全に停止するのを止め、代わりにユーザーを入力ステージに戻し、エラー メッセージを表示したいと考えています。

私はそれがどのように行われたかについての考えを持っています。一部の人々は、try {..} catch (..) {..} コンストラクトの使用を提案しており、私も試しましたが、常にプログラムを壊すことができました。

誰にもアイデアはありますか?

それで、ここに私がこれまでに持っているコードがあります。何か問題がある場合は申し訳ありません。簡単にするためにコメントを追加しようとしました。

import java.io.*;

public class bmi {

    public static void main(String[] args) throws IOException {

        /**
         * User input of weight and height.
         */

        BufferedReader in;
        in = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("Please enter how much you weigh in KG.");
        double weight = Double.parseDouble(in.readLine()); //take weight input as double

        System.out.println("Please enter how tall you are in meters.");
        double height = Double.parseDouble(in.readLine()); //take height input as double

        /**
         * BMI calculation
         */

        double bmi = weight / Math.pow(height,2); // weight divided by height squared

        /**
         * if else statements to find if person is underweight, at a healthy weight or overweight.
         */

        if (bmi<18.5) { //if BMI is smaller than 18.5
            System.out.println("Your BMI is " + bmi + ", you are underweight.");
        }

        else if (bmi>=18.5 && bmi<=25) { //if BMI is bigger than or equal to 18.5 and smaller than or equal to 25
            System.out.println("Your BMI is " + bmi + ", you are at a healthy weight.");
        }

        else if (bmi>25) { //if bmi is bigger than 25
            System.out.println("Your BMI is " + bmi + ", you are overweight");
        }

    }

}

ありがとう。

4

2 に答える 2

2

交換

System.out.println("Please enter how much you weigh in KG.");
double weight = Double.parseDouble(in.readLine()); //take weight input as double

System.out.println("Please enter how tall you are in meters.");
double height = Double.parseDouble(in.readLine()); //take height input as double

次のような構成で:

double weight = 0, height = 0;
boolean incorrectInput = true;

while(incorrectInput){
    try{
        System.out.println("Please enter how much you weigh in KG.");
        weight = Double.parseDouble(in.readLine()); //take weight input as double

        System.out.println("Please enter how tall you are in meters.");
        height = Double.parseDouble(in.readLine()); //take height input as double
        incorrectInput = false;
    }catch(NumberFormatException nxe){
        System.out.println("Incorrect value for weight or height provided. Please try again")
    }
}

あなたが本質的にやっていることは次のとおりです:

  • ユーザーに情報の入力を求めるかどうかを制御するブール変数を宣言します。これは、最初の時間と、ユーザーが体重と身長の両方に正しい値を入力するまでは true である必要があることに注意してください。

  • 入力が期待どおりでない場合、メソッド parseDouble() は NumberFormatException をスローします。この入力をキャッチして、入力が予期したものではないことをユーザーに伝える必要があります。これは catch ブロックに入ります。解析部分は try ブロック内に移動します。

  • ユーザーが予期される入力を入力すると仮定すると、必要なことは、while ループが終了するようにブール変数を設定することです。

: もう 1 つのオプションは、スキャナーを使用することです。その使用法について詳しくは、Java チュートリアル: スキャンを参照してください。

于 2012-10-28T08:36:59.190 に答える
1

そのために使えますScannerScanner適切なタイプをチェックするためのさまざまな方法を提供するので、それらを使用できます。そして、次のような例外をキャッチする必要はありませんNumberFormatException

    Scanner scanner = new Scanner(System.in);
    double weight = 0;
    double height = 0;
    System.out.println("Please enter how much you weigh in KG.");
    while (scanner.hasNext()) {
        if (scanner.hasNextDouble()) {
            // correct value
            weight = scanner.nextDouble();
        } else {
            System.out.println("Please enter correct value.");
            scanner.next();
            continue;
        }
        System.out.println("Please enter how tall you are in meters.");
        if (scanner.hasNextDouble()) {
            // correct value
            height = scanner.nextDouble();
        } else {
            System.out.println("Please enter correct value.");
            scanner.next();
            continue;
        }
        break;
    }
    double bmi = weight / Math.pow(height, 2);
    System.out.println("Your BMI :"+bmi);
    //Rest of the code remains the same 
于 2012-10-28T08:38:03.070 に答える